STM32
直播中

china

16年用户 985经验值
擅长:14230
私信 关注
[问答]

怎样去使用STM32 HAL库的定时器呢

怎样去计算定时器的定时频率呢?
定时器有哪几种计数模式呢?

回帖(1)

康辅佑

2021-11-25 16:27:48
1.时钟配置
  



  时钟配置如下图,可以看到APB1总线时钟频率为36M,但定时器频率为72MHz.

  


  2.定时器选项配置
  定时器定时频率=时钟源频率/ [(PSC+1)(ARR+1)]=72M/[(71+1)(999+1)]=1000Hz,所以定时的时间为1ms.
  定时相同的时间,PSC和ARR的值可以任意,但是注意PSC和ARR都是16位寄存器,最大值不超过65535.
  
  

  

   
  定时器有如下三种计数模式:
  递增计数模式:计数器从 0 计数到自动重载值,然后重新从 0 开始计数并生成计数器上溢事件。
  递减计数模式:计数器从自动重载值开始递减到 0,然后重新从自动重载值开始计数并生成计数器下溢事件。
  中心对齐模式:计数器从 0 开始计数到自动重载值 – 1 ,生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从0 开始重新计数。
  默认向上计数,由自动重转载值计数到最大值产生溢出。其他配置采用默认值。
   
  3.定时器中断
  点击NVIC中断管理,勾选定时器1更新中断,产生溢出时会跳转到中断服务函数。此处开启定时器1中断后还可配置中断优先级,可采用默认配置,也可自行配置。
  
  

  

   
  4.GPIO配置
  为显示定时效果,使LED每0.5s闪烁一次,因此还需初始化IO口输出。
  
  

  

  我的开发板PB0与LED相连,将PB0设置为输出模式,并且将标签设置为LED0,方便移植修改。其他默认:初始化低电平,推挽输出,既不上拉也不下拉,低速。
  
  

  

  5.工程选项配置
  
  

  

   
  

  

  .编写业务代码
  生成keil工程后打开,因为初始化的工j经由CubeMX配置好,接下来的步骤:
  1)启动定时器
  函数原型:
  HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)  
  

  

  2)中断回调函数编写
  首先定义一个计数变量Tim1_cnt,定时器定时时间1ms,计数500次即达到定时0.5s的目的。
  
  

  

  每次进入回调函数使Tim1_cnt+1,当定时0.5s时,翻转LED0状态。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
        if (htim->Instance == htim1.Instance) {
                Tim1_cnt++;
                if(Tim1_cnt==500){
                        Tim1_cnt=0;
                        HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);
                }
        }
}

  

  

  7.编译下载,默认使用ST-LINK下载,若使用其他下载器,需选择对应的下载方式。
  
  
举报

更多回帖

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