各位好,我在使用HAL库的HAL_UART_Receive()函数时遇到了这样的问题,在第一次使用HAL_UART_Receive()进行接收数据的时候是可以的,但是第二次再使用HAL_UART_Receive()接收数据的时候就接收不到数据了,但是程序还是一直在运行,只是无法接收到数据了。我查了挺久都没找到是为什么。求大佬解释!!!!!下面是我写的串口接收的部分程序,整体程序是使用STM32CubeMX生成的 |
楼主至少要确认一下变量value是“T”,才能够进入第二次接收。 而实际应用中貌似让串口一直接收,只对接收数据筛选是否进一步做处理,应该比较合理。
楼主仿真一下是不是可以产生中断,但是由于溢出标志位的情况导致数据不进行接收呢?
楼主仿真一下是不是可以产生中断,还有在13行处打印接收到的数据到底是什么,或者在14行加断点,看看value的值是多少
根据条件,第二次接受仅在第一次接收到,且满足条件的时候(接受到自复位“T”)才能执行,把第二个接受函数拿到if外面就ok了
楼主至少要确认一下变量value是“T”,才能够进入第二次接收。 而实际应用中貌似让串口一直接收,只对接收 ...
第一次接收已经成功了,就是说我第一次是能进到if里面打印那个进入第二次串口接收的,在进入if之后我就把value改成了F,然后再进行接收时就接收不到信息了,后面紧跟着打印出来的也是if里面为value赋的值,也就是F,再后面就再也接收不到串口的信息,也进不到if里面了。在这个过程中我的串口助手是一直保持着发送T的状态的。
试着用一下仿真器看一下value值是不是'T',才能够进入第二次接收
cubeMX 生成是 基本代码,只是替您 初始化CPU 【包括 UART口】,UART接收发送方式【DMA 中断 空闲 得自选】,具体处理数据得靠您。不是用了cubeMX 就是 可放心了
cubeMX 生成是 基本代码,只是替您 初始化CPU 【包括 UART口】,UART接收发送方式【DMA 中断 空闲 得自选】 ...
这个我知道,我也有自己写程序,并没有说只靠STM32CubeMX生产程序后就直接编译下载使用,我现在的问题是使用HAL_UART_Receive()函数接收了第一次之后为什么接收不到第二次
如果接收到的数据不是“T”,就进不了if。串口不能重新打开接收。之后就收不到数据了 把串口重新接收的语句放在if后面试一试。