STM32基础6--基本定时器

目录

基本定时器框图

设置定时时间

STM32CubeMx配置基本定时器

HAL库中基本定时器初始化 

HAL库中实现基本定时器中断服务过程


        STM32F407中有基本定时器,通用寄存器,高级寄存器。其中TIM6与TIM7是基本定时器。

基本定时器框图

        在基本定时器中,内部时钟(CK_INT)经过控制器到达预分频器(PSC),经过分频后进入计数器(CNT COUNTER)。当计数值与自动重装寄存器的值一样,触发自重重装重新计数,同时可以触发中断 、DMA输出与事件。

设置定时时间

        基本定时器是16位的定时器。预分频的值是16位,自动重装寄存器也是16位,也就是说这两个寄存器的最大值位65535。在STM32F407中,TIM6与TIM7都挂在APB1的Timer Clocks上面,它们的频率最高可以达到84MHz。当我们设置预分频值时,要注意预分频值不能超过65535。

        预分频寄存器

        分频后的频率 =  CK_PSC/ (PSC+1) ,该值为计数的步进值。分频后的频率的倒数,也就是每计一次数需要的时间。time = 1/ 分频后的频率 

        自动重载寄存器

       定时间 = (1/ 分频后的频率 )* (自动重载寄存器-1)

        也就是说

        定时时间 = (预分频寄存器+1)* (自动重载寄存器+1)/  时钟频率

       

        如果需要定时 1s 

        84MHz = 84000000Hz

        1s  = 1/ 1Hz =   (41999+1)* (1999+1)/ 84000000 Hz 

   

STM32CubeMx配置基本定时器

 基本设置

开启中断服务函数

 

配置中断服务函数优先级

HAL库中基本定时器初始化 

         配置完程STM32CudeMX,自动生成tim.c,里面有对基本定时器初始化的函数。

     

 

HAL库中实现基本定时器中断服务过程

        基本定时器完成后,会触发中断服务函数(在STM32CudeMX中中有配置中断函数),并且调用HAL_TIM_IRQHandler(&htim6)函数

        

        为了使用定时器的功能,HAL_TIM_IRQHandler函数里除了有基本定时器功能,还有通用定时器与高级定时器其他功能的回调。而基本定时器功能使用HAL_TIM_PeriodElapsedCallback,该函数也是一个弱函数,我们需要对该函数进行重写。

        下面对该函数进行重写,当基本定时器达到计数值时,对LED1进行翻转,也就是每1s,LED1翻转一次。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim->Instance == TIM6)
    {
       LED1_Toggle();
    }

}

        当我们编译下载程序进STM32F407时,发现LED1没有翻转,原因是MX_TIM6_Init函数只是对基本定时器初始化,但是没有开启定时器。

        注:我们需要在需要调用HAL_TIM_Base_Start_IT(&htim6),开启基本定时器TIM6 。

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颖川初尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值