手把手教处理串口数据

这里写目录标题

串口中断函数

下面的都是一些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语言中位运算中的知识,看完之后啧啧啧 秒啊~ 也可能是我太菜了,现在才懂。。。
在这里插入图片描述

原创文章 5 获赞 18 访问量 6511

猜你喜欢

转载自blog.csdn.net/xwwwj/article/details/105834671