OpenEdv-开源电子网

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

STM32串口通信实验,在例程中 无法理解 定义的USART_RX_STA

[复制链接]

26

主题

34

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2015-8-18
在线时间
43 小时
发表于 2015-12-4 08:44:16 | 显示全部楼层 |阅读模式
5金钱
//接收状态
//bit15, 接收完成标志
//bit14, 接收到0x0d
//bit13~0, 接收到的有效字节数目
u16 USART_RX_STA=0;       //接收状态标记 
在例程中是这样定义的!
我搞不懂 USART_RX_STA只是一个变量    ,接收中断(接收到的数据必须是0x0d 0x0a结尾),如果只接收3个字节,下一次接收到0x0d ,那么是如何将USART_RX_STA 中bit14位 置1的?

最佳答案

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

 楼主的C语言基础不怎么好啊,这段代码主要还是对位的操作,一个u16类型的变量可以做很多事,0~13bit用于保存字节“数目”,那总共可以保存最多2^14=16384个字节“数”,最后剩的两位一旦接收到0x0d用或对USART_RX_STA进行操作“USART_RX_STA|=0x4000”置位第15位,如果你不这样做,就需要定义三个变量,一个变量能做完的事你定义三个出来,岂不是浪费?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

786

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3223
金钱
3223
注册时间
2015-7-26
在线时间
811 小时
发表于 2015-12-4 08:44:17 | 显示全部楼层
 楼主的C语言基础不怎么好啊,这段代码主要还是对位的操作,一个u16类型的变量可以做很多事,0~13bit用于保存字节“数目”,那总共可以保存最多2^14=16384个字节“数”,最后剩的两位一旦接收到0x0d用或对USART_RX_STA进行操作“USART_RX_STA|=0x4000”置位第15位,如果你不这样做,就需要定义三个变量,一个变量能做完的事你定义三个出来,岂不是浪费?
我的博客:http://blog.csdn.net/itdo_just
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13117
金钱
13117
注册时间
2012-11-26
在线时间
3813 小时
发表于 2015-12-4 08:48:09 | 显示全部楼层
看代码,那段代码不难
学无止境
回复

使用道具 举报

6

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1027
金钱
1027
注册时间
2015-6-1
在线时间
126 小时
发表于 2015-12-4 09:38:55 | 显示全部楼层
在中断程序中置位的
回复

使用道具 举报

13

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2015-9-15
在线时间
36 小时
发表于 2015-12-4 15:49:03 | 显示全部楼层



 USART_RX_STA|=0x8000;
  USART_RX_STA|=0x4000;

这两句就是了
   将USART_RX_STA 中bit14.bit15位 置1的
 


回复

使用道具 举报

28

主题

303

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2014-8-14
在线时间
67 小时
发表于 2016-4-14 21:58:23 | 显示全部楼层
三楼讲的很清晰,值得赞一个
这个世界上还有很多很多的人,但你不认识他们,他们也不属于你的世界。这个世界上还有很多好吃的好玩的好看的东西,可真正属于你的世界其实是很小的,只是你去过的地方吃过的东西和见过的落日,还有会在乎你死活的朋友。”——《龙族》
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-6-12
在线时间
1 小时
发表于 2016-6-12 20:38:45 | 显示全部楼层
请问楼主是否找到USART_RX_STA这个变量在哪里赋值的。赋值函数在哪里?这个在书里真没讲到。
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-2-20
在线时间
0 小时
发表于 2019-2-20 11:12:36 | 显示全部楼层
if(Res==0x0d)USART_RX_STA|=0x4000;
if((USART_RX_STA&0x8000)==0)//接收未完成
这两句对14,15位进行操作的,
且“Res”是8位的,操作0x0d需要占用一个8位的寄存器,所以直接用Res进行操作
回复

使用道具 举报

3

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2019-6-29
在线时间
90 小时
发表于 2019-7-20 15:58:00 | 显示全部楼层
0x8000 转成十进制2的15次方,转换成二进制1000 0000 0000,刚好16位,最高位是1
0x4000 同理15位,最高位是1
道生一,一生二,二生三,三生万物
回复

使用道具 举报

3

主题

41

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
293
金钱
293
注册时间
2019-6-29
在线时间
90 小时
发表于 2019-7-20 15:59:15 | 显示全部楼层
u16   计数0-15   16个位置
道生一,一生二,二生三,三生万物
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 14:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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