一知半解学CubeMX——TIM:定时中断实现LED闪烁

时间:2024-03-20 12:22:04
一知半解学习环境:
    1、CubeMX 4.23.0
    2、uVision 5.14.2
    3、MCU 启明 STM32F407 开发板(高配版) V3.1

一知半解学习目标:
    1、掌握CubeMX下RCC以及SYS的相关配置;
    2、掌握CubeMX下GPIO的相关配置;
    3、掌握CubeMX下定时器常规中断的配置

一知半解实现过程:
    1、配置系统调试接口及时基时钟源;
一知半解学CubeMX——TIM:定时中断实现LED闪烁
    2、配置外部高速时钟源(HSE);
一知半解学CubeMX——TIM:定时中断实现LED闪烁
    3、配置定时器参数(TIM1);
一知半解学CubeMX——TIM:定时中断实现LED闪烁
    4、根据原理图配置相应GPIO引脚并修改宏定义名称;
一知半解学CubeMX——TIM:定时中断实现LED闪烁
一知半解学CubeMX——TIM:定时中断实现LED闪烁
一知半解学CubeMX——TIM:定时中断实现LED闪烁
   5、配置时钟树,主频168M;
一知半解学CubeMX——TIM:定时中断实现LED闪烁
    6、配置管脚默认输出状态及速率;
一知半解学CubeMX——TIM:定时中断实现LED闪烁
    7、配置定时器预分频及装载值,开启定时器中断;
一知半解学CubeMX——TIM:定时中断实现LED闪烁
        由于此处选择的是定时器1(TIM1),该定时器挂载在APB2总线上,因此TIM1时钟为168M。为了使LED间隔0.5S翻转,需要配置TIM1的中断时间为0.5S,为了方便计算预分频值定为 16800-1,装载值为5000-1; ((168M/16800)/5000) = 2Hz,即周期为0.5S。
一知半解学CubeMX——TIM:定时中断实现LED闪烁
    8、生成工程,并添加相关程序;

首先,main.c程序中添加(放置于定时器配置之后)开启 TIM1计时中断;
  /* USER CODE BEGIN 2 */
    /*使能定时器1中断*/
    HAL_TIM_Base_Start_IT(&htim1);
  /* USER CODE END 2 */


其次,在 tim.c文件中添加定时器中断完成回调函数;
/* USER CODE BEGIN 1 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
    
    if (htim->Instance == TIM1){
        
        /* Toggle LED */
        HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
        HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
        HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    }
}
/* USER CODE END 1 */


一知半解套路回顾:
    1、掌握CubeMX配置的常规套路,如SYS、RCC以及时钟树的配置等;
    2、掌握TIM中断开启函数的使用
    3、掌握定时器中断回调函数的使用;