[STM32G4] 编写中断服务程序

[复制链接]
 楼主| 4c1l 发表于 2024-11-21 01:14 | 显示全部楼层 |阅读模式
在中断服务程序中,我们将改变 GPIO 引脚的状态开/关来控制 LED 闪烁。

中断服务程序ISR:
在 stm32f0xx_it.c 文件中,找到定时器 TIM3 的中断服务程序。
以下是示例代码:

c
复制代码
/* TIM3 interrupt handler */
void TIM3_IRQHandler(void)
{
    /* Check if the update interrupt flag is set */
    if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE))
    {
        /* Clear the update interrupt flag */
        __HAL_TIM_CLEAR_FLAG(&htim3, TIM_FLAG_UPDATE);

        /* Toggle the LED on PA5 */
        HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    }
}

tpgf 发表于 2024-12-2 12:16 | 显示全部楼层
在进入中断服务程序时,需要保存当前CPU的状态(如寄存器值),以便在处理完中断后能够恢复到原来的状态。
磨砂 发表于 2024-12-2 19:22 | 显示全部楼层
当外部设备(如键盘、鼠标、硬盘等)或内部条件(如计时器溢出、除零错误等)产生中断请求时,CPU会暂停当前正在执行的任务,跳转到预先定义好的中断服务程序去处理这个事件
晓伍 发表于 2024-12-2 20:33 | 显示全部楼层
在操作系统层面,中断服务程序通常通过一个中断向量表来确定中断源,并执行相应的中断处理程序
八层楼 发表于 2024-12-2 21:41 | 显示全部楼层
中断向量表是一个包含一系列中断向量的数据结构,每个中断向量对应一个中断处理程序的地址
观海 发表于 2024-12-2 22:15 | 显示全部楼层
根据中断类型执行相应的操作,如读取输入数据、更新输出状态等
guanjiaer 发表于 2024-12-2 23:37 | 显示全部楼层
在退出中断服务程序前,需要恢复之前保存的CPU状态
公羊子丹 发表于 2025-3-15 07:49 | 显示全部楼层
你的 TIM3 计数频率是多少?如果 LED 闪烁太快或者太慢,可以调整 ARR 和 PSC 的值来控制节奏。
周半梅 发表于 2025-3-15 07:50 | 显示全部楼层
这个中断处理方式挺标准的,但如果要避免误触发,建议用 __HAL_TIM_GET_IT_SOURCE() 检查一下中断源。
Wordsworth 发表于 2025-3-15 07:52 | 显示全部楼层
如果你的应用需要更低的功耗,可以考虑让 MCU 进入低功耗模式,等 TIM3 触发中断后再唤醒。
Bblythe 发表于 2025-3-15 07:53 | 显示全部楼层
你的 LED 连接在 PA5 上,确认 GPIO 复用模式是否正确配置成 GPIO_MODE_OUTPUT_PP,否则可能不会闪烁。
Pulitzer 发表于 2025-3-15 07:54 | 显示全部楼层
如果要支持更多 LED 或者其他功能,建议用 HAL_TIM_PeriodElapsedCallback() 代替直接操作 ISR,这样代码更通用。
帛灿灿 发表于 2025-3-15 07:55 | 显示全部楼层
你的 TIM3 是在哪个时钟源下运行的?如果是 APB1,要确保时钟设置正确,否则计数器可能不会按预期工作。
Uriah 发表于 2025-3-15 07:56 | 显示全部楼层
你的中断服务函数要尽量保持简洁,如果以后要增加别的功能,最好在主循环里处理,而不是在 ISR 里做太多事。
Clyde011 发表于 2025-3-15 07:58 | 显示全部楼层
如果要用 PWM 方式闪烁 LED,可以考虑用 TIM3 的 PWM 输出,而不是在中断里手动 TogglePin(),这样效率更高。
童雨竹 发表于 2025-3-15 07:59 | 显示全部楼层
如果 LED 没有闪烁,检查一下 TIM3 是否已经启用了中断,并且 NVIC 里面 TIM3_IRQn 优先级不要太低。
万图 发表于 2025-3-15 08:00 | 显示全部楼层
你用 HAL 库的 __HAL_TIM_CLEAR_FLAG 清除了中断标志,但更好的做法是 __HAL_TIM_CLEAR_IT,这样能避免误触发问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

701

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部