stm8s105 UART2接收问题
我参考别人的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=USART2_RX_BUF;
lcd_addy++;
}
本帖最后由 zhuoyemp4 于 2015-6-4 15:51 编辑
最完美的解决是用串口接收中断,这样不管你接收多少数据,实时性能保证。
不太明白 如果你非要用这种方式,那么在while循环里给某个变量自加1,作计时用,到这个时间就用break语句退出while zhuoyemp4 发表于 2015-6-4 15:55
如果你非要用这种方式,那么在while循环里给某个变量自加1,作计时用,到这个时间就用break语句退出while ...
这种方法我试了,不行,因为string5=USART2_RX_BUF;这句会将不确定的值赋给string5,当CPU再发送22个字符的时候,前边的几个就变成不确定的值了。 你好我好大家好! 发表于 2015-6-4 15:50
不太明白
哪里不明白 借鉴官网吧 00xiaodong 发表于 2015-6-4 16:03
这种方法我试了,不行,因为string5=USART2_RX_BUF;这句会将不确定的值赋给string5,当CPU再发 ...
那就用串口中断吧 zhuoyemp4 发表于 2015-6-4 15:43
最完美的解决是用串口接收中断,这样不管你接收多少数据,实时性能保证。
我有4个地方用到接收,而且接收到的数据存在不同的变量里了,用中断是不是没法解决? zhuoyemp4 发表于 2015-6-4 16:04
那就用串口中断吧
我有4个地方用到接收,而且接收到的数据存在不同的变量里了,用中断是不是没法解决?
页:
[1]
2