news 2026/7/11 4:11:50

STM32H750串口一直进IRQ问题解决

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STM32H750串口一直进IRQ问题解决

问题: void USART2_IRQHandler(void) { UART2_XSP26A_IRQ();
},就是我如果打过断点,那么程序就一直仅在这个IRQ函数里面里面运行,不打断点就可以一直在外部运行,为什么?

解决: UART 中断里不要用 HAL_UART_Receive(),改成直接读寄存器
RDR,中断里只做“收字节、置标志、清标志”,解析放主循环。这样断点调试会稳定很多。 主要是“非阻塞接收”修复的。 之前的问题核心是:
HAL_UART_Receive(&huart2_xsp26a, …, 1U, 1000U);
这个函数是阻塞式的,放在中断里不合适。你打断点后,串口硬件继续跑,等继续运行时中断标志、接收状态、超时状态容易堆在一起,表现成一直进
IRQ。 现在改成: uint8_t rx_data = (uint8_t)(huart2_xsp26a.Instance->RDR &
0xFFU); 读 RDR 是立即完成的,不等待、不超时、不走 HAL 的接收状态机,所以中断很快退出,之前“卡在 IRQ
里”的问题就没了。 ORE/FE/NE 清除是辅助修复: 防止已经产生的错误标志一直挂着。 防止溢出/噪声/帧错误导致中断反复进入。
对调试断点场景尤其有帮助。 所以结论: 主要原因:中断里用了阻塞式 HAL_UART_Receive() 主要修复:改成中断里直接读 RDR
辅助修复:清除 ORE/FE/NE 错误标志 如果只清 ORE/FE/NE,但继续在 IRQ 里用
HAL_UART_Receive(),问题大概率还会出现。

/*ORE:Overrun Error,溢出错误。新字节来了,但上一个字节还没及时从 RDR 读走,硬件接收寄存器被覆盖或丢数据。 FE:Framing Error,帧格式错误。常见原因是波特率不匹配、停止位异常、线被干扰。 NE:Noise Error,噪声错误。RX 线上有干扰,采样不稳定。 */voidUART2_XSP26A_IRQ(void){if(__HAL_UART_GET_IT(&huart2_xsp26a,UART_IT_RXNE)!=RESET){uint8_trx_data=(uint8_t)(huart2_xsp26a.Instance->RDR&0xFFU);if((uart2_xsp26a_tr.uart_rx.recv_flag==0U)&&(uart2_xsp26a_tr.uart_rx.rx_len<RX_SIZE)){uart2_xsp26a_tr.uart_rx.rx_buffer[uart2_xsp26a_tr.uart_rx.rx_len]=rx_data;uart2_xsp26a_tr.uart_rx.rx_len++;}else{(void)rx_data;uart2_xsp26a_tr.uart_rx.rx_len=0U;uart2_xsp26a_tr.uart_rx.recv_flag=0U;}}if(__HAL_UART_GET_IT(&huart2_xsp26a,UART_IT_IDLE)!=RESET){__HAL_UART_CLEAR_IDLEFLAG(&huart2_xsp26a);if((uart2_xsp26a_tr.uart_rx.rx_len>0U)&&(uart2_xsp26a_tr.uart_rx.recv_flag==0U)){uart2_xsp26a_tr.uart_rx.recv_flag=1U;}}if(__HAL_UART_GET_FLAG(&huart2_xsp26a,UART_FLAG_ORE)!=RESET){__HAL_UART_CLEAR_OREFLAG(&huart2_xsp26a);}if(__HAL_UART_GET_FLAG(&huart2_xsp26a,UART_FLAG_FE)!=RESET){__HAL_UART_CLEAR_FEFLAG(&huart2_xsp26a);}if(__HAL_UART_GET_FLAG(&huart2_xsp26a,UART_FLAG_NE)!=RESET){__HAL_UART_CLEAR_NEFLAG(&huart2_xsp26a);}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 4:11:28

2026年有哪些代码审查平台能做到真正提升代码质量?

一个让研发总监失眠的问题 去年和一位金融科技公司的研发总监聊天&#xff0c;他说了一句话让我印象很深&#xff1a;“我现在最怕的不是系统宕机&#xff0c;是上线后出数据问题&#xff0c;然后查日志发现——那段代码三个月前就合并了&#xff0c;当时走了评审流程&#xff…

作者头像 李华
网站建设 2026/7/11 4:09:04

生产级SKILL开发:稳快可维护的EDA自动化实践

1. 这不是写个脚本那么简单&#xff1a;SKILL在EDA行业的真实分量“SKILL”这个词&#xff0c;在IC设计圈外几乎没人听过&#xff0c;但在Cadence Virtuoso这个全球主流模拟/混合信号电路设计平台里&#xff0c;它就是工程师的第二双手、第三只眼、甚至延伸出的思考神经。它不是…

作者头像 李华
网站建设 2026/7/11 4:09:00

Claude Code大型代码库记忆系统重构指南

1. 为什么大型代码库必须重构Claude Code的记忆系统我第一次在接手一个20万行的VueSpring Boot混合单体项目时&#xff0c;直接把Claude Code往根目录一丢&#xff0c;结果它连npm run build和./gradlew build该用哪个都分不清。更糟的是&#xff0c;它反复把TypeScript接口写成…

作者头像 李华
网站建设 2026/7/11 4:08:23

CTF密码学入门|凯撒密码(简单移位加密)真题详解(附Python源码)

0. 前言 凯撒密码是CTF密码学中最基础、最高频的古典加密题型&#xff0c;属于入门必学知识点。算法逻辑简单、解题思路固定&#xff0c;新手可以快速上手。本篇将通过真实CTF入门真题&#xff0c;完整拆解凯撒密码解题思路&#xff0c;附带可直接运行的Python解密代码&#x…

作者头像 李华
网站建设 2026/7/11 4:08:08

Text Mesh Pro 1.1.52 Beta 3.1:SDF渲染原理、性能优化与Addressables材质修复

1. 项目概述&#xff1a;为什么Text Mesh Pro是Unity开发者的必备工具&#xff1f;如果你在Unity里做过UI&#xff0c;尤其是需要处理大量、高质量、多语言文本的项目&#xff0c;那你一定对Unity原生的UI Text组件又爱又恨。爱的是它简单易用&#xff0c;恨的是它在性能、效果…

作者头像 李华