
最初的问题已经解决\衍生的新问题待高人解答 接收函数HAL_UART_Receive()在if (__HAL_UART_GET_FLAG(huart, UART_FLAG_ORE) == SET)这个判断分支中发现接收寄存器还么有被读取,便又有新的数据进来,发生了溢出,从而停止了整个接收过程。 所以这个问题的出现与IrDA模式并没有什么关系,就是串口调试方法不当导致的。 HAL_UART_Receive()后面进行多次比较长时间的Delay再打断点,还是会有同样的问题。猜想这可能是CubeIDE调试模式断点的具体实现方式有关? 另外,还发现 (i=0;i<10;i++) rx_data=i; 调试时数组标号和数组值错位相等的情况,太诡异了 rx_data[1]=4, rx_data[2]=5, ... 实在令人费解! 以下是最初的提问内容: 仅仅在CuBeMX中配置了USART2为IrDA模式,调用HAL_IRDA_Receive/Transmit,利用两个硬件一收一发,在Debug模式下可以看到接收硬件只有第一次主循环中能收到正确的数据,再次停到断点处,就收不到数据了,很奇怪。 ![]() ![]() |
STM32H7R7 CubeMX无配置问题
如何解决用CubeMX生成代码时会将main.c文件中的汉字变成乱码的问题?
用NanoEdge Ai训练多分类后输出概率一直为一样的值,传不同数据永远都是一样的概率
STM32F723ZET6使用ADC捕获标准正弦波并通过USB主动上报,正弦波重新拟合后存在凹陷峰?
STM32CubeMX 使用"FW_F1 V1.8.6"生成FreeRTOS代码缺少"freertos_mpool.h"?
STM32N6 cubeAI部署时用的内存是在内部还是外部?
STM32N657X0Q无法通过SPI驱动st7796板子
STM32CubeMX 配置STM32G070RBT6TR时无法使能PVD中断
STM32G070RBT6TR STM32CubeMX ADC配置后使用的是内部参考电压且零点的读数太大了
STM32C092的cubemx无法使用
[md]断点导致产生了溢出中断,需要重新初始化串口。
发生类似情况时,检查一下程序读取时是否判断到接收溢出了,接收的时候尽量不要加断点。接收的时候超时尽量超过1000。如果可以用尽量用中断接收,通过回调函数进行接收完的数据处理。
[md]您好,非常感谢指导!
似乎确实存在一个“超时”:
只要把初始化函数 MX_USART2_IRDA_Init() 和接收函数一起放到主循环里,每次初始化完立刻进接收,是可以收到数据的。但是,如果在初始化函数和接收函数之间加了断点,就收不到数据了。
这...究竟是哪里超时了呢?
[md]非常感谢,就是这个原因!小弟不才,到今天才明白过来。祝您2024心想事成,万事如意~