OpenEdv-开源电子网

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

新手请教USART_RX_STA问题

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-9-14
在线时间
0 小时
发表于 2013-9-14 16:00:51 | 显示全部楼层 |阅读模式
手册中描述:当接收到从电脑发过来的数据,把接收到的数据保存在USART_RX_BUF中,同时在接收状态寄存器(USART_RX_STA)中计数接收到
的有效数据个数,当收到回车(0X0D,0X0A)的第一个字节0X0D时,计数器将不再增加,等待0X0A的到来,而如果0X0A没有来到...
请问,USART_RX_STA是自定义的,那它是如何充当计数功能的?USART_RX_STA又是如何读取到USART_RX_BUF中的数据个数的?

代码:
if(USART1->SR&(1<<5))//接收到数据   

  res=USART1->DR; //传递数据字节到DR寄存器,#define USART1 ((USART_TypeDef *) USART1_BASE)
  if((USART_RX_STA&0x8000)==0)//接收未完成; 
 {
   if(USART_RX_STA&0x4000)//接收到了0x0d
     {
    if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
    else USART_RX_STA|=0x8000; //接收完成了
     }
   else //还没收到0X0D
     { 
    if(res==0x0d)USART_RX_STA|=0x4000;
    else
      {
     USART_RX_BUF[USART_RX_STA&0X3FFF]=res;
     USART_RX_STA++;
     if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收  
      }  
     }
  }                  
 }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2013-9-6
在线时间
0 小时
发表于 2013-9-14 16:22:12 | 显示全部楼层
USART_RX_STA++;
这条语句是用来计数的。
USART_RX_STA又是如何读取到USART_RX_BUF中的数据个数的?

答:USART_RX_STA是状态标记变量,从0开始,串口中断接收到一个数据(一个字节)就自增1。当数据读取全部OK时候(回车和换行符号来的时候),那么
USART_RX_STA的最高位置1,表示串口数据接收全部完毕了,然后main函数里面可以处理数据了。
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2013-9-14
在线时间
0 小时
 楼主| 发表于 2013-9-14 20:17:02 | 显示全部楼层
回复【2楼】我是大专生:
---------------------------------
res=USART1->DR; 
这条语句DR寄存器是8~0位来储存数据的,由两个寄存器组成TDR和RDR,那请问每次读进来的数据占据哪几位呢?
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-6-5
在线时间
2 小时
发表于 2017-9-1 10:18:05 | 显示全部楼层
我感觉这个程序只能读取一次返回来的数据啊???
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2017-9-1 11:50:31 | 显示全部楼层
francischu 发表于 2017-9-1 10:18
我感觉这个程序只能读取一次返回来的数据啊???

老铁,这个是僵死贴阿.
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2016-6-5
在线时间
2 小时
发表于 2017-9-1 13:02:00 | 显示全部楼层
aiyeba 发表于 2017-9-1 11:50
老铁,这个是僵死贴阿.

啥意思啊???
回复 支持 反对

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

积分
964
金钱
964
注册时间
2014-11-18
在线时间
160 小时
发表于 2017-9-1 13:49:17 | 显示全部楼层

人家13年发表的帖子,你来回复干啥??
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2018-7-27
在线时间
4 小时
发表于 2018-8-3 14:44:39 | 显示全部楼层
我是大专生 发表于 2013-9-14 16:22
USART_RX_STA++;
这条语句是用来计数的。
USART_RX_STA又是如何读取到USART_RX_BUF中的数据个数的?

答:U ...

请问一下我不想用0x0d和0x0a 来作为接收数据结束的标志,想写一个自己的协议,这个要怎么操作?
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2016-10-26
在线时间
7 小时
发表于 2019-9-17 16:02:23 | 显示全部楼层
嗯,不错不错!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 18:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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