stm32f070串口接受中断进入硬件错误
本帖最后由 地瓜patch 于 2025-3-25 23:07 编辑为了解决stm32f407与stm32f070串口通信六七个小时后串口数据恒定不变的问题。
用cubeMX重新建立工程,生成项目代码。070用串口2中断接受407的数据。
出现的问题是在进入HAL_UART_RECEIVE_it()函数时,程序进入硬件错误HardFault_Handler 函数。
然后就没有然后了
结帖,犯了个致命低级错误,加载文件startup_stm32f070x6.s搞成startup_stm32f030x6.s了,问题解决 学习一下,一般启动函数会导致问题 数组越界或指针非法访问,UART 接收缓冲区地址无效(如未初始化或越界)
中断嵌套或递归调用耗尽栈空间(STM32F070 的栈较小,默认约 1KB)
时钟配置错误也可能会这样,UART 波特率或时钟源配置不匹配 UART 中断优先级配置不当,导致嵌套中断触发 HardFault
在HardFault_Handler 中添加调试代码,读取 SCB 寄存器 确定错误类型
确保传入HAL_UART_Receive_IT()的缓冲区地址有效且未被释放
在CubeMX中确认 USART2 的时钟源(如 PCLK1)和 波特率 与 STM32F407 一致(如 115200)
检查 USART2_TX/RX 引脚是否冲突(如被其他外设占用)
避免 UART 中断被高优先级中断阻塞,在startup_stm32f070xx.s 中增大栈大小(如从 1KB 改为 2KB)
在UART 错误回调函数中处理错误状态,HardFault 寄存器的具体值(CFSR/HFSR/MMFAR)
页:
[1]