STM32
直播中

李丽

7年用户 1379经验值
私信 关注
[问答]

定时器是如何控制LED灯500ms亮灭的

定时器是如何控制LED灯500ms亮灭的?有哪些基本流程呢?

回帖(1)

陈勇

2021-11-17 15:33:01
  硬件平台:正点原子STM32MINI开发板(STM32RCT6)
  软件平台:STM32CubeMX
  KEIL5
  实现功能:定时器控制LED灯500ms亮灭
  硬件连接: PA8 -》LED0
  说明:有时候程序下载后不实现,可试着复位一下,也可在魔术棒配置中打开下载后复位。
  (仅仅写了定时器中断部分,其余初始化未做说明)
  
  1、选择定时器2,并选择时钟源为内部时钟
  
  2、分频系数设为7199,计数值设为4999,则定的时间为
  (7199+1)*(4999+1)/72000000=500ms
  
  3、使能定时器中断
  
  4、选择中断优先级配置。
  
  5、使用函数HAL_TIM_Base_Start_IT(&htim2);打开定时器2中断
  
  6、stm32f1xx_it.c中,有定时器2的中断服务函数,点击HAL_TIM_IRQHandler(&htim2);转到定义。
  
  7、关于定时器有很多处理,输入捕获,PWM输出等,我们这里主要看定时器的更新。
  
  8、转到定义,找到__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);这也是个回调函数,是虚函数。
  
  9、main.c函数中重定义此回调函数,并编写相关代码,代码含义为如果中断由定时器2触发,翻转PA8电平。
  在用回调函数时,发现定时器中断只会有一个回调函数,不同定时器中断触发后调用的是同一个函数,这对有时候想要在不同文件中写不同的定时器中断文件来说可能不太方便,如果有这方面需求,可按照以下方案配置。
  
  1、在NVIC的Code generation中取消生成定时器2的中断服务函数,还是要使能定时器,生成代码,生成代码后还是要打开定时器中断。
  
  2、在main.c中重新写定时器2的中断服务函数,记得清除中断服务函数标志位。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分