STM32-HAL库-TIMx学习

Posted qu-yang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32-HAL库-TIMx学习相关的知识,希望对你有一定的参考价值。

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学习的主要内容,如果未能解决你的问题,请参考以下文章

STM32-HAL库-UART学习

STM32 HAL库学习系列第9篇---NVIC按键外部中断函数

书籍连载《STM32 HAL 库开发实战指南—基于F7》-第一章

STM32 HAL库学习系列第7篇---定时器TIM 输入捕获功能

STM32CubeMX-HAL库开发笔记-基于Proteus仿真

STM32串口接收中断——基于HAL库