ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

手把手教处理串口数据

2020-04-30 21:03:57  阅读:525  来源: 互联网

标签:STA USART 处理 手把手 RX 0x4000 串口 运算


这里写目录标题

串口中断函数

下面的都是一些C语言基础知识,只不过是具体算了一下,最好还是自己动手算一算呀,不过是真的秒啊
在这里插入图片描述

在这里插入图片描述

今天和大家分享的是串口通讯中是对数据如何处理的,一开始学的时候并没有注意,昨天仔细看了一下,把一些理解分享一下。
USART_RX_STA其实算是一个计数的标志吧。稍后仔细说一下。

在这里插入图片描述
这里是判断中断的标志位是否置位,如果置位那么久将数据存储在Res里,我们看一下USART_ReceiveData() goto进去是这样的

在这里插入图片描述

发现这个函数返回的数据其实是DR寄存器(数据寄存器)的值, 至于后边为什么是0x01FF,在我看来可能是因为串口通信是要选择字长为八位或者九位,进行与运算也就是前九位都保持不变。
还有一个非常重要的点就是串口发送数据是结尾必须是0x0d和0x0a,也就是 \r\n 假设我们要发送数据WSSG\r\n

在这里插入图片描述

刚一开始传输数据肯定是没有完成的,所以依次进入图中的序号1,2,3。在3中,将Res中的数据(DR寄存器中的数据)传输给定义的一个存储数据的一个数组USART_RX_BUF[],然后令USART_RX_STA自加一次,这样可能有点抽象,我列一个表格直观的看一下吧
在这里插入图片描述

下一步也就是要接受\r,也就是0x0d了。进入到这里
在这里插入图片描述

也就是执行这一句USART_RX_STA|=0x4000也就是和0100 0000 0000 0000 0000进行或运算,现在USART_RX_STA=4,按照十六进制也就是0100,两个进行或运算。

在这里插入图片描述

此时USART_RX_STA=0x4004,这时我们看一下USART_RX_STA&0x4000

在这里插入图片描述

也就是0x4000,就进入了这一部分

在这里插入图片描述
之后进行这个运算USART_RX_STA|=0x8000
在这里插入图片描述

得到USART_RX_STA=0xC004
同上进入主函数中的这一部分

在这里插入图片描述

这个时候len=USART_RX_STA&0x3fff因为前面的0x4000和0x8000都是对最高的两位进行运算,我们与0x3fff进行与运算也就将最高两位清零,得到原来的数据,如图

在这里插入图片描述

得到len=4

这些东西大部分都是C语言中位运算中的知识,看完之后啧啧啧 秒啊~ 也可能是我太菜了,现在才懂。。。
在这里插入图片描述

标签:STA,USART,处理,手把手,RX,0x4000,串口,运算
来源: https://blog.csdn.net/xwwwj/article/details/105834671

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有