STM32的定时器简介

1. 框架中已初始化的定时器资源

定时器

类型

默认功能(需确认)

中断潜力

TIM1

高级定时器

可能配置为PWM输出

支持复杂中断(刹车、编码器)

TIM2

通用定时器

可能用作基础定时

最常用的定时中断源

TIM3

通用定时器

可能用作PWM/输入捕获

灵活的中断/事件生成

2. 启用定时中断的步骤

(1) 检查CubeMX配置(或手动修改)

确保定时器中断已使能:

// 在定时器初始化函数(如MX_TIM2_Init())中应有类似代码:

htim2.Instance = TIM2;

htim2.Init.Prescaler = 7199; // 预分频值(72MHz/(7199+1)=10kHz)

htim2.Init.CounterMode = TIM_COUNTERMODE_UP;

htim2.Init.Period = 9999; // 自动重装载值(10kHz/(9999+1)=1Hz中断)

htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;if (HAL_TIM_Base_Init(&htim2) != HAL_OK) {

Error_Handler();}

// 关键点:启用定时器中断HAL_TIM_Base_Start_IT(&htim2); // 启动并开启中断

(2) 实现中断回调函数

在main.c的USER CODE BEGIN 4区域添加:

// 定时器更新中断回调函数(1Hz触发示例)void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {

if (htim->Instance == TIM2) { // 判断是TIM2触发

HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 翻转PA5(LED)

}}

(3) 启用NVIC中断(如果未自动配置)

在main.c中找到NVIC配置,确保定时器中断已开启:

// 在MX_TIM2_Init()附近添加HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);HAL_NVIC_EnableIRQ(TIM2_IRQn);


3. 定时中断的典型应用场景

(1) 精准定时任务

// 每500ms执行一次任务void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {

static uint32_t tick = 0;

if (htim->Instance == TIM2) {

tick++;

if (tick % 5 == 0) { // 500ms(假设中断100ms一次)

Read_Sensor(); // 读取传感器

}

}}

(2) PWM输入捕获(测量频率/占空比)

// 在MX_TIM3_Init()中配置为输入捕获模式后:void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) {

if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {

uint32_t pulse = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);

// 计算脉冲宽度...

}}

(3) 硬件级实时控制

// 使用TIM1的刹车中断实现紧急停止void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) {

if (htim->Instance == TIM1) {

Emergency_Shutdown(); // 触发安全保护

}}


4. 关键注意事项

  1. 中断优先级

    在main.c中调整优先级以避免冲突:

    HAL_NVIC_SetPriority(TIM2_IRQn, 1, 0); // 优先级高于串口中断

  2. 中断频率计算

    中断频率=系统时钟频率/[ Prescaler+1) * (Period+1) ]

        Prescaler:预分频值;Period:ARR,自动重装载值,决定周期

        示例:72MHz/(7199+1)/(9999+1) = 1Hz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值