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

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个地方用到接收,而且接收到的数据存在不同的变量里了,用中断是不是没法解决?
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版