/** * @file stm32f4xx_it.c * @brief STM32F407 中断服务程序。 * @version 2.0 * @author zengbingjie * @date 2026-07-29 * @copyright 版权所有 (c) 2026 Xinje Electric。 * @note 修改记录:2.0 适配 uC/OS-II 和 USART1 Modbus 中断。 */ #include "main.h" #include "stm32f4xx_it.h" /** * @brief 处理不可屏蔽中断。 */ void NMI_Handler(void) { while (1) { } } /** * @brief 处理硬件错误中断。 */ void HardFault_Handler(void) { while (1) { } } /** * @brief 处理内存管理错误中断。 */ void MemManage_Handler(void) { while (1) { } } /** * @brief 处理总线错误中断。 */ void BusFault_Handler(void) { while (1) { } } /** * @brief 处理用法错误中断。 */ void UsageFault_Handler(void) { while (1) { } } /** * @brief 处理系统服务调用中断。 */ void SVC_Handler(void) { } /** * @brief 处理调试监控中断。 */ void DebugMon_Handler(void) { } /** * @brief 处理 PendSV 上下文切换中断。 */ void PendSV_Handler(void) { } /** * @brief 处理 1 ms 系统节拍中断。 * @note OS_CPU_SysTickHandler 封装了 uC/OS-II 的中断进入、节拍和退出顺序; * 不得在此处改为手工调用 OSIntEnter、OSTimeTick 和 OSIntExit。 */ void SysTick_Handler(void) { /* HAL 维护毫秒级时间基准,uC/OS-II 维护任务延时和超时。 * OS 移植层封装了这个共享节拍所需的中断嵌套和调度记录。 */ HAL_IncTick(); if (OSRunning == OS_TRUE) { OS_CPU_SysTickHandler(); } } /** * @brief 处理 Modbus RTU T1.5/T3.5 单次静默计时中断。 * @note 中断仅推进帧边界状态机;完整帧通过信号量交给 Modbus 任务处理。 */ void TIM5_IRQHandler(void) { /* TIM5 中断只推进 RTU T1.5/T3.5 帧边界状态机。在这里解析帧或访问应用数据, * 会使中断执行时间不可控。 */ OSIntEnter(); AppModbusRtuTimerIrqHandler(); OSIntExit(); } /** * @brief 处理 USART1 的 Modbus 收发中断。 * @note HAL 回调只接收字节或登记恢复请求,不在中断上下文解析协议或等待发送。 */ void USART1_IRQHandler(void) { /* HAL 会分发接收完成、发送完成和 UART 错误回调。回调只记录状态并通知任务, * 不阻塞,也不解析 ADU。 */ OSIntEnter(); HAL_UART_IRQHandler(&Uart1Handle); OSIntExit(); }