你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8s105 UART2接收问题

[复制链接]
00xiaodong 提问时间:2015-6-4 15:38 /
我参考别人的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++;
               
        }

收藏 评论15 发布时间:2015-6-4 15:38

举报

15个回答
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[lcd_addy]=USART2_RX_BUF;这句会将不确定的值赋给string5,当CPU再发送22个字符的时候,前边的几个就变成不确定的值了。
00xiaodong 回答时间:2015-6-4 16:03:43
无力回天 回答时间:2015-6-4 16:04:23
借鉴官网吧
zhuoyemp4 回答时间:2015-6-4 16:04:55
00xiaodong 发表于 2015-6-4 16:03
这种方法我试了,不行,因为string5[lcd_addy]=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个地方用到接收,而且接收到的数据存在不同的变量里了,用中断是不是没法解决?
zhuoyemp4 回答时间:2015-6-4 16:09:01
00xiaodong 发表于 2015-6-4 16:05
我有4个地方用到接收,而且接收到的数据存在不同的变量里了,用中断是不是没法解决? ...

为什么不能呢?先搞清通信协议
00xiaodong 回答时间:2015-6-4 16:15:37
zhuoyemp4 发表于 2015-6-4 16:09
为什么不能呢?先搞清通信协议

额,我是这样想的,您给我看看我的想法对不对。
我的流水线是0123456789这10步,我要在2处接收CPU命令,并把在这个命令显示出来,但是CPU没有在2处给我,而是在5处给我了,那我现在已经过了第二步,不需要显示了,那接收到CPU命令也没用了啊
00xiaodong 回答时间:2015-6-4 16:16:41

有地址吗
zhuoyemp4 回答时间:2015-6-4 16:22:30
00xiaodong 发表于 2015-6-4 16:15
额,我是这样想的,您给我看看我的想法对不对。
我的流水线是0123456789这10步,我要在2处接收CPU命令, ...

串口一直等待接收,接收到数据了,你再判断你的流水线是到哪一步了,如果接收到的命令不符合要求那就不用接收到的数据。
00xiaodong 回答时间:2015-6-4 16:27:16
zhuoyemp4 发表于 2015-6-4 16:22
串口一直等待接收,接收到数据了,你再判断你的流水线是到哪一步了,如果接收到的命令不符合要求那就不用 ...

哦,这样应该可以。谢谢
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版