从串口调试助手向开发板发送一个数据0x55,再将接收到的数据发送出去。 串口中断服务函数如下: if( USART_GetITStatus(USART_CHANNEL, USART_IT_RXNE) != RESET ) {gg_rs232_recv_buf[gg_recv_index]=(T_U8)USART_ReceiveData(USART_CHANNEL); USART_SendData(USART_CHANNEL, gg_rs232_recv_buf[gg_recv_index]); gg_recv_index++; } 在Debug模式下,在接收的缓存中gg_rs232_recv_buf[]收到的是0x30(即只有第一个字符被接收到了),如图1所示: 从串口发送出来的也是0x30,如图2所示: 然而在连续运行的时候,发送的0x55,接收之后,然后可以通过串口正常地发送出来,如图3所示: 为什么在Debug的时候不正常呢?没找出原因,求大神指点! |
æ¥æ¶ç¼åä¸æ¥æ¶å°çæ°æ®
串å£åéåºå»çæ°æ®
è¿ç»è¿è¡æ¶ä¸²å£ååºçæ°æ®
道理很简单,你要发送十六进制就要选中HEX发送,如果不选择的话就会以ASCII发送‘0’,‘x’,'5','5',因为你又是中断模式下的dubug,所以第一次中断只能接收第一个字符‘0’,即使0x30,非dibug模式下肯定会把4个字符接收完成的所以看上去是对的。如果debug模式下全速运行得到的结果也是应该是对的。
的确是这个问题,非常感谢!