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 开始重新计数

库函数

 

/* 开启指定定时器 */
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)

/* 关闭指定定时器 */
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim)

 

定时一秒示例

说明

  以下分别以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中断业务 }
}

 

posted @ 2020-04-11 12:00  曲杨  阅读(1147)  评论(0)    收藏  举报