OpenEdv-开源电子网

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

求指教USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

[复制链接]

82

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2015-10-16
在线时间
72 小时
发表于 2015-10-30 18:25:43 | 显示全部楼层 |阅读模式
5金钱
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)
{
Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据

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;//接收数据错误,重新开始接收  

最佳答案

查看完整内容[请看2#楼]

1、将最高位置1,表示接收完成了 2、
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2015-6-1
在线时间
126 小时
发表于 2015-10-30 18:25:44 | 显示全部楼层
1、将最高位置1,表示接收完成了
2、
回复

使用道具 举报

6

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2015-6-1
在线时间
126 小时
发表于 2015-10-30 18:25:44 | 显示全部楼层
2、将串口接收中读到的信息存到USART_RX_BUF里
USART_RX_STA&0X3FFF这个是为了去除最高两位的影响,将最高两位置0
回复

使用道具 举报

16

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1292
金钱
1292
注册时间
2014-12-20
在线时间
534 小时
发表于 2015-10-30 18:39:02 | 显示全部楼层
好好学下C语言就知道了。
回复

使用道具 举报

82

主题

194

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2015-10-16
在线时间
72 小时
 楼主| 发表于 2015-10-30 19:07:06 | 显示全部楼层
回复【2楼】BMN李:
---------------------------------
我知道,但现在看到这了就先想弄清楚,能否讲解下啊?
回复

使用道具 举报

16

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1292
金钱
1292
注册时间
2014-12-20
在线时间
534 小时
发表于 2015-10-30 19:08:30 | 显示全部楼层
回复【3楼】liuxiangyong:
---------------------------------
不能
回复

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2015-10-31 10:42:16 | 显示全部楼层
C语言最基本的运算符。慢慢用二进制推算对比就知道了
回复

使用道具 举报

10

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2018-3-20
在线时间
20 小时
发表于 2018-3-24 19:03:38 | 显示全部楼层
BMN李 发表于 2015-10-30 18:39
好好学下C语言就知道了。

回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-4-22
在线时间
2 小时
发表于 2018-5-11 21:15:36 | 显示全部楼层
1 接受状态寄存器USART_RX_STA 与上0x8000。    因为0与上任何数都是0  所以USART_RX_STA&0x8000 这个表达式  只取出USART_RX_STA 的bit13~16位(8转换为2进制是0111)  后两位是判断有没有接收到0X0D 和 0X0A。  所以 这一句  当真只取后四位即可 故是与运算
后面之所以用或  是因为 0或上任何数都是本身,并且我们需要保留USART_RX_STA的值,故用或运算
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2018-7-4
在线时间
18 小时
发表于 2020-2-14 15:41:08 | 显示全部楼层
BMN李 发表于 2015-10-30 18:39
好好学下C语言就知道了。

最反感这种装逼的假货了,你要说你就给人家娃娃说一下么就算了,不胡搜了你就少回复
回复

使用道具 举报

9

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2018-7-4
在线时间
18 小时
发表于 2020-2-14 15:46:04 | 显示全部楼层
BELLA1 发表于 2018-5-11 21:15
1 接受状态寄存器USART_RX_STA 与上0x8000。    因为0与上任何数都是0  所以USART_RX_STA&0x8000 这个表达 ...

8转换为二进制是0111?
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2020-2-20
在线时间
6 小时
发表于 2020-10-18 12:54:38 | 显示全部楼层
y375484311 发表于 2020-2-14 15:41
最反感这种装逼的假货了,你要说你就给人家娃娃说一下么就算了,不胡搜了你就少回复

赞同,装杯biss
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2019-11-10
在线时间
18 小时
发表于 2021-2-1 21:09:46 | 显示全部楼层
BELLA1 发表于 2018-5-11 21:15
1 接受状态寄存器USART_RX_STA 与上0x8000。    因为0与上任何数都是0  所以USART_RX_STA&0x8000 这个表达 ...

0x8000换成二进制是1000 0000 0000 0000
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 21:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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