|
我参考别人的UART2的发送和接收程序入下(与主CPU通信)。现在面临的问题是,在我给CPU发送请求后,如果主CPU不给答复,那么我的程序就会一直在(1)处进入死循环,我该怎么修改跳出循环而不影响string5的赋值。 u8 UART2_ReceiveByte(void) { while (!(UART2_SR & UART2_FLAG_RXNE));// (1) USART2_RX_BUF=(uint8_t)UART2_DR; return USART2_RX_BUF; } void UART2_SendByte(u8 data) { UART2_DR=data; while (!(UART2_SR & UART2_FLAG_TXE)); } main() { uchar lcd_addy=0; uchar j=10; while (lcd_addy<22) //等待主CPU启动完成并返回当前属性值,CPU答复22个字符 { while(j) //向主机发送10次请求命令 { UART2_SendByte(0xff); //单片机向主CPU发送获取当前显示命令请求 UART2_SendByte(0x04); UART2_SendByte(0x00); j--; } UART2_ReceiveByte(); string5[lcd_addy]=USART2_RX_BUF; lcd_addy++; } |
微信公众号
手机版
最完美的解决是用串口接收中断,这样不管你接收多少数据,实时性能保证。
这种方法我试了,不行,因为string5[lcd_addy]=USART2_RX_BUF;这句会将不确定的值赋给string5,当CPU再发送22个字符的时候,前边的几个就变成不确定的值了。
哪里不明白
那就用串口中断吧
我有4个地方用到接收,而且接收到的数据存在不同的变量里了,用中断是不是没法解决?
我有4个地方用到接收,而且接收到的数据存在不同的变量里了,用中断是不是没法解决?