OpenEdv-开源电子网

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

有关战舰串口if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3f;

[复制链接]

21

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-17
在线时间
29 小时
发表于 2013-9-17 19:42:18 | 显示全部楼层 |阅读模式
if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3f
USART_RX_STA中的定义的是u16 USART_RX_STA
USART_RX_STA&0x8000的结果是多少?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

107

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2015-3-5
在线时间
44 小时
发表于 2015-3-10 11:36:29 | 显示全部楼层
在串口中断里有一句:
                               else USART_RX_STA|=0X8000;
意思是如果接收完成,则将USART_RX_STA的最高位置1,所以USART_RX_STA&0X8000的值为非0,执行if下面的代码~
回复 支持 4 反对 0

使用道具 举报

10

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-12-3
在线时间
0 小时
发表于 2014-11-5 10:03:02 | 显示全部楼层
回复【5楼】雪梦my:
---------------------------------
额。在串口接收中断里。
不用谢了……
回复 支持 2 反对 0

使用道具 举报

10

主题

274

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2013-12-3
在线时间
0 小时
发表于 2014-5-9 21:34:24 | 显示全部楼层
回复【3楼】那一季的花ゞ撒满忧伤:
---------------------------------
是按位与计算啊。因为原子哥的代码里设置收到完整字符串包括\r\n之后就会给USART_RX_STA最高位赋值1,
所以这按位与就是判断这个最高位是不是1,来判断有没有收到完整字符串的。
不用谢了……
回复 支持 1 反对 0

使用道具 举报

39

主题

2026

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2020
金钱
2020
注册时间
2013-5-1
在线时间
87 小时
发表于 2013-9-17 20:02:02 | 显示全部楼层
USART_RX_STA&0x8000这一句是判断,判断是否接收完成,即接收到回车
博观而约取,厚积而薄发。
回复 支持 反对

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2014-3-31
在线时间
0 小时
发表于 2014-5-9 20:43:19 | 显示全部楼层
回复【2楼】745021926:
---------------------------------
这里不是按位与运算吗?
回复 支持 反对

使用道具 举报

9

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2014-9-25
在线时间
23 小时
发表于 2014-11-4 22:05:21 | 显示全部楼层
回复【4楼】eling13:
---------------------------------
在哪里可以看到  给USART_RX_STA最高位赋值1  这一串代码啊
回复 支持 反对

使用道具 举报

9

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
187
金钱
187
注册时间
2014-9-25
在线时间
23 小时
发表于 2014-11-5 21:15:22 | 显示全部楼层
回复【6楼】eling13:
---------------------------------
恩  看到了 ,谢谢啊
回复 支持 反对

使用道具 举报

5

主题

11

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-10-7
在线时间
4 小时
发表于 2015-10-7 13:29:29 | 显示全部楼层
回复【4楼】eling13:
---------------------------------
哪里设置的?
回复 支持 反对

使用道具 举报

5

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2014-8-29
在线时间
11 小时
发表于 2015-10-22 01:04:46 | 显示全部楼层
回复【9楼】径辙:
---------------------------------
串口中断函数,
void USART1_IRQHandler(void)
{
u8 res;
#ifdef OS_CRITICAL_METHOD  //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntEnter();    
#endif
if(USART1->SR&(1<<5))//接收到数据
{  
res=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;//接收数据错误,重新开始接收   
}  
}
}          
}
#ifdef OS_CRITICAL_METHOD  //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntExit();    
#endif
}
有深圳的大牛带我飞吗?
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-7-5
在线时间
2 小时
发表于 2015-11-11 15:24:24 | 显示全部楼层
回复【10楼】放狼的爷们:
---------------------------------
USART_RX_STA++;  这句话有什么作用啊
回复 支持 反对

使用道具 举报

5

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2014-8-29
在线时间
11 小时
发表于 2015-11-12 13:58:24 | 显示全部楼层
回复【11楼】新手来了:
---------------------------------


u16 USART_RX_STA=0;       //接收状态标记   
首先它是一个变量。。
这个是原子哥定义的一个变量,当做寄存器来使用,手册是查不到的。
它的bit0-13位表示接收到的有效数据个数,每加一次就是接受到一个8位数据呗呗。
有深圳的大牛带我飞吗?
回复 支持 反对

使用道具 举报

查理斯汀 该用户已被删除
发表于 2016-8-17 15:39:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-8-24
在线时间
2 小时
发表于 2016-8-24 15:15:46 | 显示全部楼层
能解释一下为什么按位与就置1了?0x8000表示什么?位运算是怎么进行的?  纯新手,谢!
回复 支持 反对

使用道具 举报

13

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2016-10-2
在线时间
29 小时
发表于 2016-11-17 15:51:22 | 显示全部楼层
文若成 发表于 2016-8-24 15:15
能解释一下为什么按位与就置1了?0x8000表示什么?位运算是怎么进行的?  纯新手,谢!

1000 0000 0000 0000,应该是这个。16进制换算成2进制
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-8-24
在线时间
2 小时
发表于 2017-5-26 14:26:36 | 显示全部楼层
HXF 发表于 2016-11-17 15:51
1000 0000 0000 0000,应该是这个。16进制换算成2进制

谢谢~~·
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2017-8-20
在线时间
10 小时
发表于 2017-9-17 19:29:30 | 显示全部楼层
学习了
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2018-7-31
在线时间
2 小时
发表于 2019-1-8 10:50:51 | 显示全部楼层
阿拓 发表于 2015-3-10 11:36
在串口中断里有一句:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;& ...

解释很到位。小白在此谢过
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 00:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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