OpenEdv-开源电子网

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

串口接收中断函数中原子哥写的函数看起来很吃力啊。

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
38
金钱
38
注册时间
2015-1-3
在线时间
3 小时
发表于 2015-1-28 20:22:48 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]
[mw_shl_code=c,true]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;//接收数据错误,重新开始接收 } } } } [/mw_shl_code] 看这段程序很吃力啊,原子哥写的通信协议倒是在上面能看懂,就是不明白这种地方,例如“if(USART_RX_STA&0x4000)//接收到了0x0d”这句代码中为什么与上0x4000之后就说明接收到了0x0d了?

[/mw_shl_code]

最佳答案

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

看下一句,if(Res==0x0d)      USART_RX_STA|=0x4000; USART_RX_STA就是个人为设置的标志,初始值为0; 只有收到 0d 时,才人为地赋值为0x4000;反过来说,值为0x4000时,就说明。。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11558
金钱
11558
注册时间
2014-4-1
在线时间
1318 小时
发表于 2015-1-28 20:22:49 | 显示全部楼层
看下一句,if(Res==0x0d)      USART_RX_STA|=0x4000;
USART_RX_STA就是个人为设置的标志,初始值为0;
只有收到 0d 时,才人为地赋值为0x4000;反过来说,值为0x4000时,就说明。。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 07:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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