00xiaodong 发表于 2015-6-4 15:38:27

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:43:24

本帖最后由 zhuoyemp4 于 2015-6-4 15:51 编辑

最完美的解决是用串口接收中断,这样不管你接收多少数据,实时性能保证。


你好我好大家好! 发表于 2015-6-4 15:50:48

不太明白

zhuoyemp4 发表于 2015-6-4 15:55:31

如果你非要用这种方式,那么在while循环里给某个变量自加1,作计时用,到这个时间就用break语句退出while

00xiaodong 发表于 2015-6-4 16:03:17

zhuoyemp4 发表于 2015-6-4 15:55
如果你非要用这种方式,那么在while循环里给某个变量自加1,作计时用,到这个时间就用break语句退出while ...

这种方法我试了,不行,因为string5=USART2_RX_BUF;这句会将不确定的值赋给string5,当CPU再发送22个字符的时候,前边的几个就变成不确定的值了。

00xiaodong 发表于 2015-6-4 16:03:43

你好我好大家好! 发表于 2015-6-4 15:50
不太明白

哪里不明白

无力回天 发表于 2015-6-4 16:04:23

借鉴官网吧

zhuoyemp4 发表于 2015-6-4 16:04:55

00xiaodong 发表于 2015-6-4 16:03
这种方法我试了,不行,因为string5=USART2_RX_BUF;这句会将不确定的值赋给string5,当CPU再发 ...

那就用串口中断吧

00xiaodong 发表于 2015-6-4 16:05:21

zhuoyemp4 发表于 2015-6-4 15:43
最完美的解决是用串口接收中断,这样不管你接收多少数据,实时性能保证。




我有4个地方用到接收,而且接收到的数据存在不同的变量里了,用中断是不是没法解决?

00xiaodong 发表于 2015-6-4 16:07:08

zhuoyemp4 发表于 2015-6-4 16:04
那就用串口中断吧

我有4个地方用到接收,而且接收到的数据存在不同的变量里了,用中断是不是没法解决?
页: [1] 2
查看完整版本: stm8s105 UART2接收问题