串口部分问题
对于STM32F407的串口中断接收,空格(ASCII码 0x20)的处理取决于 串口调试助手的发送模式 和 代码逻辑设计。以下是关键点解析:
- 串口调试助手的发送模式
若使用「文本模式」发送:
发送的字符串 AA 55 00 33 会被视为ASCII字符流,空格( )会被转换为ASCII码 0x20。
实际发送的数据为:0x41 0x41 0x20 0x35 0x35 0x20 0x30 0x30 0x20 0x33 0x33(即 A A <空格> 5 5 <空格> 0 0 <空格> 3 3 的ASCII码)。
你的代码会将这些空格(0x20)当作有效数据存入 g_usart_rx_buf,可能导致协议解析错误。
若使用「Hex/十六进制模式」发送:
调试助手会将 AA 55 00 33 解析为4个十六进制字节:0xAA, 0x55, 0x00, 0x33。
空格仅作为分隔符,不会被发送到串口。
实际接收的数据为 0xAA, 0x55, 0x00, 0x33,代码正常处理。
串口接收中断触发条件:
当串口接收到一个字节的数据时,硬件会将状态寄存器(USART_UX->SR)的 RXNE(Receive Data Register Not Empty)位 置1。
如果接收中断使能(USART_UX->CR1 的 RXNEIE 位为1),则会触发中断。
每次接收一个字节:
串口是逐字节接收数据的,因此每接收到一个字节,都会触发一次中断。