码迷,mamicode.com
首页 > 其他好文 > 详细

STM32-HAL库-TIMx学习

时间:2020-04-11 12:52:33      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:ack   settings   时钟   重载   dash   ros   typedef   计数   res   

STM32的八个十六位定时器

  基本定时器:TIM6,TIM7 (APB1总线)

  通用定时器:TIM2,TIM3,TIM4,TIM5  (APB1总线)

  高级计时器:TIM1,TIM8  (APB2总线)

 

时基单元

  计数器寄存器  (TIMx_CNT)

  预分频器寄存器 (TIMx_PSC)

  自动装载寄存器 (TIMx_ARR)

  重复次数寄存器 (TIMx_RCR)

计数模式

  递增计数模式:计数器从 0 计数到自动重载值,然后重新从 0 开始计数并生成计数器上溢事件。

  递减计数模式:计数器从自动重载值开始递减到 0,然后重新从自动重载值开始计数并生成计数器下溢事件。

  中心对齐模式:计数器从 0 开始计数到自动重载值 – 1 ,生成计数器上溢事件;然后从自动重载值开始向下计数到 1 并生成计数器下溢事件。之后从0 开始重新计数

定时一秒示例

  说明

    以下分别以TIM1,TIM2为例

    APB1 Timer clocks 以 36 MHz 为例

    APB2 Timer clocks 以 72 MHz 为例

  设置内部时钟源(在STM32CubeMX中设置)

 

    Clock Source->Internal Clock

  开启中断(在STM32CubeMX中设置)

    TIM1 -> NVIC Settings -> TIM1 update interrupt -> Enabled

    TIM2 -> NVIC Settings -> TIM2  global  interrupt -> Enabled

  配置定时器(在STM32CubeMX中设置)

    定时频率 = 定时器时钟 / ( (预分频 +1) / (计数值 +1) ) Hz

    定时时间 = 1 / 定时频率 s

    TIM1

      Prescaler(预分频)——7199

      Counter Period(计数值)——9999

      auto-reload preload(是否重装定时器)——Enable

     TIM2

      Prescaler(预分频)——35999

      Counter Period(计数值)——999

      auto-reload preload(是否重装定时器)——Enable

   最终应用

      在 main.c 中的 USER CODE BEGIN 2 中添加

        HAL_TIM_Base_Start_IT(&htim1); //定时器1使能

        HAL_TIM_Base_Start_IT(&htim2); //定时器2使能

      在 main.c 中的 USER CODE BEGIN 4 下添加中断回调函数

        void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

        {
          if (htim->Instance == htim1.Instance)//确定是哪个定时器

          { //定时器1中断业务 }

          else if(htim-> Instance == htim2.Instance)

          { //定时器2中断业务 }
        }

STM32-HAL库-TIMx学习

标签:ack   settings   时钟   重载   dash   ros   typedef   计数   res   

原文地址:https://www.cnblogs.com/qu-yang/p/12678642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!