对于串口中断函数USART_RX_STA接收标记位解析,费话不多说了,直接上代码。

#define USART1_REC_LEN 200
u8 USART1_RX_BUF[USART1_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节.
//接收状态
//bit15, 接收完成标志
//bit14, 接收到0x0d
//bit13~0,   接收到的有效字节数目
u16 USART1_RX_STA=0;       //接收状态标记      void USART1_IRQHandler(void)
{ u8 Res;if((USART_GetITStatus(USART1,USART_IT_RXNE))!=RESET) //判断串口是否接收到数据{Res = USART_ReceiveData(USART1);printf("%c",Res); //接收到则打印回电脑端}if((USART1_RX_STA &0X8000)==0) //接收未完成{if(USART1_RX_STA & 0X4000)    //接收到回车0x0d ,执行{if(Res!=0x0a) USART1_RX_STA=0;else USART1_RX_STA |=0X8000;//完成数据接收,把USART1_RX_STA高bit[15]置1}else    //没有接收到回车                       {if(Res==0x0d)               //接收到回车(0x0d)USART1_RX_STA |=0X4000;     //则把USART1_RX_STA高bit[14]置1else {                       //USART1_RX_BUF[USART1_RX_STA&0X3FFF]=Res;USART1_RX_STA++;if(USART1_RX_STA>(USART1_REC_LEN-1))USART1_RX_STA = 0; //加到200,会把标记清0}}}
}

串口中断函数中USART_RX_STA关键点解析:
(1)USART_RX_STA这个在0~13位是用来存数据个数的,可以看到每次结束判断会有USART_RX_STA++;
而14、15位则是通过与运算来将高位置1
(2)Res这个是接收到的数据,可以看到有此函数
Res=USART_ReceiveData(USART1)
(3)USART_RX_BUF这个是用来保存接收到的数据的可以看到每次结束判断会有
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
这个也是精髓之处,故此通过上面分析,不难理解

①if(Res==0x0d)USART_RX_STA|=0x4000;
意为一旦接收到回车(这个是系统自动生成的0x0d数据),那么USART_RX_STA第14位会被置为1(也就是我们所谓的标记)
②if(USART_RX_STA&0x4000)//接收到了 0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else
USART_RX_STA|=0x8000; //接收完成了
}
这个就意味着第一个if条件满足了(前面分析了,第14位置为1标记好了),接下来就是所谓的“等待0x0a的到来(这个也是系统自动生成的而且是紧接着0x0d,没有紧接着收到的话那么就意味着接受错误)”那么一旦接受完了0x0d和0x0a那么就将第15位置1(也是我们所谓的标记)那么到这里数据就已经接受完毕。如果一直没按回车,一直在输入数字,也可以看到函数最后有这样一行if(USART1_RX_STA>(USART1_REC_LEN-1))//大于200,清0
USART1_RX_STA = 0;
把标记位清0,重新接收。

以上是整理JackCrum博主大佬,感谢

STM32串口中断接收标记USART_RX_STA 学习相关推荐

  1. STM32串口中断接收实验

    STM32串口中断接收实验的详细说明 准备 代码实现 总结 准备 材料:STM32F407ZGT6最小系统板,串口1通过跳线帽连接到了CH340上. 需求:从电脑向板子的串口1发送一个字符串(以回车和 ...

  2. STM32串口中断接收HAL库超详解析

    之前一直用的固件库跑c8t6和zet6,现在有幸接触到stm32H743用到HAL库,学习嘛都是踩坑,csdn,然后...理解底层库的代码 本人有幸遇到了H7的串口中断接收只进去一次的Bug,于是马上 ...

  3. STM32 HAL库 串口DMA(收发)和STM32串口中断接收(接收时间管理机制)+ESP8266 wifi模组通信问题

    一.HAL库 串口 DMA+ESP8266模组通信问题 用STM32 HAL库串口的DMA发送和空闲中断接收处理数据,单片机发送AT指令给ESP8266 wifi模组问题:单片机连续几次给wifi模组 ...

  4. STM32串口中断接收方式详细比较

    本例程通过PC机的串口调试助手将数据发送至STM32,STM32通过SP3232芯片采用中断接收方式完成,然后接收数据后将所接收的数据又发送至PC机. 实例一: void USART1_IRQHand ...

  5. STM32串口中断接收帧数据并返回给上位机总结(配合MAX3483)

    一.前言 这是我的第一篇CSDN,记录一些代码总结,一方面与大家分享交流,另一方面方便以后再次使用能够快速回忆,再就是提高自身写作水平.如有错误之处,欢迎各位大佬批评指正. 二.所涉及的芯片 1.ST ...

  6. STM32串口的使用(原理、结构体、库函数、串口发送字符(串)、重定向printf串口发送、串口中断接收控制灯)

    参考:串口的结构体 重定向printf串口发送stm32等博文 作者:点灯小哥 发布时间: 2021-03-06 21:46:33 网址:https://blog.csdn.net/weixin_46 ...

  7. STM32使用串口中断接收HWT101的数据

    因研究生阶段项目需求,需要采用HWT101给单片机提供角度信息. HWT101是维特智能公司下的一款角度传感器,它可以通过计算角速度测量绕Z轴旋转的水平方向的偏航角,具有高精度.几乎无漂移.不受磁场干 ...

  8. STM32串口中断程序-迪文屏,

    STM32串口中断程序-迪文屏,串口接收准确数值 这几天一直在做原子开发板与迪文屏的通信,开发板向迪文屏写数据已经完成,但是从迪文屏读的数据总是无法返回开发板.原始及调试程序见下图: 在串口接收到从d ...

  9. STM32串口实时接收数据与所提前定义的比较,并作出相应的操作

    STM32串口实时接收数据与所提前定义的比较,并作出相应的操作 //typedef const uint16_t uc16; /*!< Read Only */uc16 BUF[10]={162 ...

最新文章

  1. 专访施巍松:边缘计算早期提出者之一
  2. 看我如何作死 | 将CPU、IO打爆
  3. 中国有超3亿人存在睡眠障碍 收入越高睡眠越少
  4. timm 笔记:数据集
  5. weblogic部署ssh2应用出现异常
  6. HDU - 2049 不容易系列之(4)——考新郎(错排问题+组合数学)
  7. linkedin上看到的CRM团队信息
  8. python学生信息管理系统 实验报告_Python学生信息管理系统的开发
  9. SpringBoot内置servlet容器分析
  10. lwj_C#_集合的使用、接口方法的实现;
  11. Vue的8种通信方式
  12. 【Redis】Linux安装Redis步骤详细讲解,以及make、make install区别
  13. 面对众多的在线打印平台该怎么选择?
  14. 向中级程序员转变必备的10个秘诀
  15. 中国第三代半导体行业运行现状及十四五规划研究分析报告2022-2028年版
  16. 探索 Flutter 模拟事件触发 | 开发者说·DTalk
  17. 数据库中主键、主码、主属性、关键字、候选关键字、码的区别
  18. 业精于勤荒于嬉 行成于思毁于随
  19. 青岛电大计算机组装与维护试题,2017电大计算机应用基础试题
  20. 什么是情商?丨附思维导图和提高情商的小建议

热门文章

  1. 实用最优化方法课后习题-第二章
  2. # Android实习周记-9.29
  3. 计蒜课中沙子的质量(动态规划)感想
  4. Kubeadm部署高可用K8S集群
  5. NK/DC细胞膜仿生脂质体药物载体|真核细胞膜包覆仿生纳米粒|肿瘤细胞膜包裹的仿生纳米颗粒
  6. python与分形0021 - 【教程】奥林匹克五环
  7. html css 奥运五环,用css写一个有趣的奥运五环~。
  8. 微信小程序 echarts.js过大 导至错误( Error: 代码包大小为 xxxxkb,上限为 2048 kb,请删除文件后重试)
  9. vscode代码索引_VS Code:自定义代码片断(Snippets)
  10. C语言报告书学生信息管理系统,C语言实训 学生信息管理系统