stm32rct6 基本定时器
时间: 2025-01-01 15:30:28 浏览: 6
### STM32F103RCT6 基本定时器使用方法与配置
#### 定时器简介
STM32F103RCT6 是一款基于 ARM Cortex-M3 内核的 32 位微控制器,具有多个通用定时器 (General Purpose Timer),这些定时器可以用于精确的时间测量和事件触发[^3]。
#### 配置基本定时器
为了实现一个简单的延时功能或周期性任务调度,可以通过如下方式来初始化和配置 TIM2 定时器:
```c
#include "stm32f1xx_hal.h"
TIM_HandleTypeDef htim2;
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
// 初始化定时器 TIM2
__HAL_RCC_TIM2_CLK_ENABLE(); // 启用 TIM2 的时钟
htim2.Instance = TIM2;
htim2.Init.Prescaler = 7999; // 设置预分频系数为8000-1, 即 APB1 时钟(8MHz) / 8000 = 1kHz
htim2.Init.CounterMode = TIM_COUNTERMODE_UP; // 计数模式向上计数
htim2.Init.Period = 999; // 自动重装载值设为1000-1, 实现每秒一次溢出中断
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
if(HAL_TIM_Base_Init(&htim2) != HAL_OK){
Error_Handler();
}
// 开启更新中断
HAL_TIM_Base_Start_IT(&htim2);
while (1){}
}
// 中断服务函数处理
void TIM2_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */
/* USER CODE END TIM2_IRQn 0 */
HAL_TIM_IRQHandler(&htim2); // 调用库函数完成硬件层面上的操作
/* USER CODE BEGIN TIM2_IRQn 1 */
printf("Timer interrupt occurred\n");
/* USER CODE END TIM2_IRQn 1 */
}
```
上述代码实现了对 TIM2 的基础配置,并设置了每秒钟发生一次的定时器中断。这里的关键参数包括 `Prescaler` 和 `Period`,它们共同决定了定时器的工作频率以及每次溢出所需时间长度[^1]。
对于预分频的理解,在此例子中,假设系统时钟经过 AHB/APB 总线后到达定时器模块的是 8 MHz,则通过设定 Prescaler=7999 可使实际进入定时逻辑部分的有效脉冲变为 1 kHz;而 Period 设定为 999 表示每当计数值达到 1000 就会产生一次溢出事件,即大约每隔一秒就会触发一次中断请求[^4]。
阅读全文