TIM定时器例程

为了精准的定时,有时候我们需要用到硬件定时器,这一节我们讲一下如何初步的使用定时器,更加高级的功能,大家可以在网上自行查阅学习~

1. 工程创建

这一节为了简单入门,我们将使用功能简单的TIM11进行学习。这里就不重复在说工程创建了,仓库已经给好模板了,拿去参考就行。

  1. 我们设定了TIM11的分频为100, 所以Prescaler为100-1=99.
  2. 设定计数为UP向上计数, 计数1000, 即counter period为1000-1=999.
  3. 所以最终的一次计数频率为100Mhz/100=1Mhz, 然后需要计数1000次才发生中断,即一次中断为1000KHz/1000=1KHz, 即1ms一次中断.

2. 改代码

我们想要实现TIM11定时,然后定时翻转LED灯,如何实现呢?

  1. 首先在初始化时,启用tim11.

     //Start the tim base
     HAL_TIM_Base_Start_IT(&htim11);
    
  2. 在中断中, 即在文件stm32f4xx_it.c中TIM11的中断回调函数中加入一个变量计数.

     uint16_t timecount=0;
     void TIM1_TRG_COM_TIM11_IRQHandler(void)
     {
         /* USER CODE BEGIN TIM1_TRG_COM_TIM11_IRQn 0 */
         timecount += 1;
         /* USER CODE END TIM1_TRG_COM_TIM11_IRQn 0 */
         HAL_TIM_IRQHandler(&htim11);
         /* USER CODE BEGIN TIM1_TRG_COM_TIM11_IRQn 1 */
    
         /* USER CODE END TIM1_TRG_COM_TIM11_IRQn 1 */
     }
    
  3. 在main中, while(1)中查询timecount, 然后进行LED的翻转, 即可实现LED的定时翻转啦~

     if(timecount >= 500)
     {
         timecount = 0;
         printf("500ms time up\r\n");
         HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
     }
    

3. 课后作业

  1. 完成教学的内容;
  2. 如何实现呼吸灯?即亮度一直在变化.
Copyright © 油炸鸡开源硬件 | 渝ICP备2024035140号-2 | all right reserved,powered by Gitbook更新时间: 2025-06-07 10:18:46

results matching ""

    No results matching ""