前言

基础定时器的使用以及周期计算是一项非常基础的技术
以下介绍基础定时器的使用和周期运算

基础定时器的周期运算

计算公式

T = \frac{(ARR + 1) * (PSC + 1)}{TCK}

公式介绍

中断周期(T):你设置的中断时间,当你开启中断后,会等待中断周期后然后触发中断。
自动重装载值(ARR):你设置的定时器初始值。
时钟预分频系数(PSC):你设置的定时器预分频。
时钟频率(TCK):你选择的单片机的时钟频率。

运算示例

假如你的时钟频率是72MHZ,如果要在定时器开启后1秒触发中断,计算如下:

$$ 1 = \frac{(ARR + 1) * (PSC + 1)}{72 \times 10^6} $$
$$ \text{则:}(ARR + 1) * (PSC + 1) = 72 \times 10^6 $$
$$ \text{可得:}
\begin{cases}
ARR = 7200 - 1\\
PSC = 10000 - 1\\
\end{cases} $$

基础定时器的使用

CubeMX + HAL库

CubeMX设置

设置RCC

设置时钟

开启定时器

如果是基本定时器TIM6或TIM7等,只需要勾选Activited就使用
开启全局中断,请按下操作步骤,勾选global interrupt即可

代码

以定时器TIM2为例

开启定时器
// 使用此函数开启定时器
HAL_TIM_Base_Start(&htim2);
中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *html)
{
  // 判断是否是TIM2产生的中断
  if (html->Instance == TIM2)
  {
    // 处理TIM2产生的中断
  }
}
关闭定时器
// 使用此函数关闭定时器
HAL_TIM_Base_Stop(&htim2);