STM32CubeMx+FreeRTOS+TIM定时器实现

本文介绍了如何在STM32F4XX开发板上使用定时器TIM2控制LED每秒闪烁一次,通过CubeMx配置21MHz时钟,启用中断,并在HAL_TIM_PeriodElapsedCallback中实现LED状态切换。
摘要由CSDN通过智能技术生成

通过定时器中断实现开发板上的LED闪烁:亮一秒灭一秒。

开发板有14个定时器,定时器的拓扑图如下:

定时器分布在APB1和APB2上,定时器的作用有所不同。选择TIM2作为本文的使用定时器。在CubeMx中配置器时钟为21Mhz。

APB1 peripheral clocks主要服务于低速外设,如一些基本的I/O接口和某些传感器等。这些外设通常需要较低的时钟频率和功耗,以满足其工作需求。因此,APB1的时钟频率和性能相对较低。

另一方面,APB2 timer clocks则服务于高速外设,如某些需要高速数据传输或高精度计时的设备。这些外设通常需要更高的时钟频率和性能,以满足其高速、高精度的要求。因此,APB2的时钟频率和性能通常会比APB1更高。

配置定时器TIM2,控制灯1秒闪烁,在CubeMx中配置:

TIM的时钟为21Mhz,以上配置可得到定时器溢出的时间为1秒,配置启用中断使能:

生成代码后可在工程的代码结构中生成tim.c文件,tim.c文件中有初始化函数,在STM32F4XX.it.c文件中有中断函数。
void TIM2_IRQHandler(void)
{
  /* USER CODE BEGIN TIM2_IRQn 0 */

  /* USER CODE END TIM2_IRQn 0 */
  HAL_TIM_IRQHandler(&htim2);
  /* USER CODE BEGIN TIM2_IRQn 1 */

  /* USER CODE END TIM2_IRQn 1 */
}
在HAL_TIM_IRQHandler函数中可以找到HAL_TIM_PeriodElapsedCallback(htim); 该函数提示未定义,类似虚函数,用户代码中可以实现该函数,实现LED的IO口翻转。代码如下“
  void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
     {
         if(htim->Instance == TIM2)
         {
             LED0_TOGGLE();
         }
     }
PS:LED0_TOGGLE();在上一篇博文中有定义。

下载程序到板子后,看LED的闪烁,并用示波器查看LED的IO的波形,经验证输出的波形符合预期。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值