OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 12550|回复: 5

stm32串口接收数据 问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2011-8-15
在线时间
0 小时
发表于 2011-8-20 14:17:04 | 显示全部楼层 |阅读模式
请问原子大哥:
 for(j=0;j<15;j++)
   {
    USART1->DR=reqbuff[j];        
     while((USART1->SR&0x40)==0); //判断是否发送完成TC=0则没有发送完成          
   }
这三句话可以把reqbuff[15] 里的数循环发送。
为什么      
     for(b=0;b<15;b++)
       {
        while((USART1->SR&0x20)==0);  //RXNE=1时,读数据寄存器非空,可以读数据
         buff=USART1->DR;
           }
这三句话就不能接收数据?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2011-1-16
在线时间
4 小时
发表于 2011-8-20 15:22:38 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2011-8-20 15:25:25 | 显示全部楼层
串口接收开启了么?
参考下我们串口实验里面的接收.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2011-8-15
在线时间
0 小时
 楼主| 发表于 2011-8-20 16:45:54 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
谢谢原子大哥,串口接受开启了,是其他问题引起的。我的程序写的不好,收不到数据就会死在这里,不往下进行,并且另外一块板子不是每次都发送数据。
回复 支持 反对

使用道具 举报

59

主题

189

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
451
金钱
451
注册时间
2012-4-11
在线时间
1 小时
发表于 2012-4-14 10:16:23 | 显示全部楼层
 for(j=0;j<15;j++)
   {
    USART1->DR=reqbuff[j];        
     while((USART1->SR&0x40)==0); //判断是否发送完成TC=0则没有发送完成          
   }
这三句话可以把reqbuff[15] 里的数循环发送。
为什么   
因为 reqbuff[j]里面是你要发送的数据依次吧数据送到发送缓冲区发送一共发送15次也就吧数据全部发送完毕了   
     for(b=0;b<15;b++)
       {
        while((USART1->SR&0x20)==0);  //RXNE=1时,读数据寄存器非空,可以读数据
         buff=USART1->DR;
           }
这三句话就不能接收数据?
我觉得你这句有点问题
while((USART1->SR&0x20)==0);  //RXNE=1时,读数据寄存器非空,可以读数据
         buff=USART1->DR;
相当于你把USART1->DR;里面的数据接收了15次


回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2014-4-20
在线时间
0 小时
发表于 2014-4-20 11:46:10 | 显示全部楼层
回复【5楼】shenhao7752376:
---------------------------------
你好,我刚学32。
但是看USART_SR时,是说有数据时RXNE会被置1,通过读USART_DR可以将该为清零,或者向该位写0来清零。
那么
     for(b=0;b<15;b++)
       {
        while((USART1->SR&0x20)==0);  //RXNE=1时,读数据寄存器非空,可以读数据
        buff=USART1->DR;                   //RXNE 位应该是被清0了,  只有下一次有接收到数据RXNE被置1,  才能再有新数据存进buff[]中阿
       }
那应该是接收的是15次不同的数据才对呀。

刚开始学,也不知道说得对不对,要是不对麻烦指出啊,谢谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-10 03:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表