7.2
7.20关于串口忙碌状态
今天终于搞明白了为什么连续两句的HAL_UHAL_UART_Transmit_DMA()第二句发送不出来。原因也很简单,就是忙碌。但是在等待忙碌方面我下了大功夫才明白。
按照常理来说的while(HAL_UART_GetState(&CON_HUART) == HAL_UART_STATE_BUSY_TX);在我的情况下是不可以用的。通过找到宏定义,HAL_UART_STATE_BUSY_TX代表0x00000021U,即后四位是0001表示发送忙。而b1位为1表示接收忙,即HAL_UART_STATE_BUSY_RX代表了0x00000022U。这时候就已经应该意识到了,我这种情况是在接收忙的情况下的。这时候无论发送是不是忙都不可能是0001了,因为他一直是接收忙的(通过OLED显示HAL_UART_GetState(&CON_HUART)可以发现b1一直为1),因此他的取值只在 0010和 0011中变化。因此等待延时可以写成检测最后一位即可。
以上是发送忙,那么为什么我这个会一直接收忙呢?原因是我在前面启用了串口dma空闲中断:HAL_UARTEx_ReceiveToIdle_DMA(&CON_HUART, RecvBuffer_Uart, BUFFER_SIZE_UART); 。一旦开启了这个,那么接收忙就会置位,直到收到消息。
7.2
https://mingzaitown.github.io/2025/10/29/电赛/电赛报错日志/7.20/