stm32 hal库接收不定长数据程序

2023-11-08

协议层

串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口。在串口通讯的协议层中,规定了数据包的内容,它由启始位、主体数据、校验位以及停止位组成,通讯双方的数据包格式要约定一致才能正常收发数据,其组成见图 。

12f30f0b20994c279fea6e65b79d4922.jpg

波特率

本章中主要讲解的是串口异步通讯,异步通讯中由于没有时钟信号 (如前面讲解的 DB9 接口中是没有时钟信号的),所以两个通讯设备之间需要约定好波特率,即每个码元的长度,以便对信号进行解码,图 20_6 中用虚线分开的每一格就是代表一个码元。常见的波特率为 4800、9600、115200 等。

通讯的起始和停止信号

串口通讯的一个数据包从起始信号开始,直到停止信号结束。数据包的起始信号由一个逻辑 0 的数据位表示,而数据包的停止信号可由 0.5、1、1.5 或 2 个逻辑 1 的数据位表示,只要双方约定一致即可。

有效数据

在数据包的起始位之后紧接着的就是要传输的主体数据内容,也称为有效数据,有效数据的长度常被约定为 5、6、7 或 8 位长。

数据校验

在有效数据之后,有一个可选的数据校验位。由于数据通信相对更容易受到外部干扰导致传输数据出现偏差,可以在传输过程加上校验位来解决这个问题。校验方法有奇校验 (odd)、偶校验(even)、0 校验 (space)、1 校验 (mark) 以及无校验 (noparity)。

奇校验要求有效数据和校验位中“1”的个数为奇数,比如一个 8 位长的有效数据为:01101001,此时总共有 4 个“1”,为达到奇校验效果,校验位为“1”,最后传输的数据将是 8 位的有效数据加上 1 位的校验位总共 9 位。偶校验与奇校验要求刚好相反,要求帧数据和校验位中“1”的个数为偶数,比如数据帧:11001010,此时数据帧“1”的个数为 4 个,所以偶校验位为“0”。0 校验是不管有效数据中的内容是什么,校验位总为“0”,1 校验是校验位总为“1”。

19d37dcd9efe48fb99f06c81f0e0521e.jpg

//初始化

/*使能串口接收断 */  __HAL_UART_ENABLE_IT(&UartHandle,UART_IT_RXNE); 

 /*使能串口空闲中断 */  __HAL_UART_ENABLE_IT(&UartHandle,UART_IT_IDLE);  

 __HAL_UART_CLEAR_IDLEFLAG(&UartHandle);

//中断

void DEBUG_USART_IRQHandler(void)

{

 if(__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_IDLE ) != RESET) //中断中判断产生了空闲中断标志认为一轮结束

 {    

  Rxflag = 1;

  Rxlen += BUFFSIZE - UartHandle.RxXferCount; //累计达不到BUFFSIZE个数的部分  __HAL_UART_CLEAR_IDLEFLAG(&UartHandle);

 HAL_UART_AbortReceive_IT(&UartHandle);   

  return ;

 } 

 HAL_UART_IRQHandler(&UartHandle); 

}

 

//main.c

/*调用printf函数,因为重定向了fputc,printf的内容会输出到串口*/ 

printf("欢迎使用野火开发板\n");  

/*自定义函数方式*/ 

Usart_SendString( (uint8_t *)"串口接收不定长字节,请查看程序内注释\r\n" );  

/*开启第一次接收状态*/ 

HAL_UART_Receive_IT(&UartHandle,(uint8_t*),);

//查询

char ch;   

while(1)

{ch=getchar();

printf("接收到字符:%c\n",ch);

}

//中断

__HAL_UART_ENABLE_IT(&UartHandle,UART_IT_RXNE); 

void DEBUG_USART_IRQHandler(void)

{ uint8_t ch=0; if(__HAL_UART_GET_FLAG( &UartHandle, UART_FLAG_RXNE ) != RESET)

  { ch=( uint16_t)READ_REG(UartHandle.Instance->DR);

WRITE_REG(UartHandle.Instance->DR,ch);

  }

}

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

stm32 hal库接收不定长数据程序 的相关文章

随机推荐

  • 滤波电容的选择

    滤波电容的选择 1 电容数量 一般对于低频电路的话 一般为2个 一个用来滤除纹波 一个用来滤除高频信号 如果出现较大的瞬时电流 可以加一个大的钽电容 2 电容容量 通常都说大容值和小容值 其实是去耦和旁路 一般电路去耦的话0 1uF即可 考
  • 微服务网关

    1 微服务网关的概述 不同的微服务一般会有不同的网络地址 而外部客户端可能需要调用多个服务的接口才能完成一个业务需求 如果让客户端直接与各个微服务通信 会有以下的问题 客户端会多次请求不同的微服务 增加了客户端的复杂性 存在跨域请求 在一定
  • easyExcel实现excel文件上传和下载

    一 easyExcel简介 在工作中 经常需要把excel中的数据导入系统 亦或是把系统中符合筛选条件的数据通过excel的方式导出 Java解析 生成Excel比较有名的框架有Apache poi jxl 但他们都存在一个严重的问题就是非
  • linux replace \r\n to \n

    cat test log tr d r hexdump C tail 转载于 https www cnblogs com long123king p 3832986 html
  • springBoot整合Shiro(详细教程分析)

    目录 一 前言 二 SpringBoot整合Shiro 2 1 导入依赖 2 2 创建实体 2 3 配置Shiro 2 4 编写CustomRealm 2 5 编写相关的接口 2 6 业务实现代码 三 测试 四 参考文献 一 前言 1 1
  • 分布式爬虫理念

    目录 分布式爬虫理念 1 分布式爬虫框架 2 维护爬取队列 3 去重 4 防止中断 1 分布式爬虫框架 Scrapy中有一个本地爬取队列Queue 这个队列是利用depue模块实现的 新的Repuest生成就会被放到队列里 随后被调度器Sc
  • java 循环遍历字符串_Java 程序迭代遍历字符串中的每个字符

    Java 程序迭代遍历字符串中的每个字符 在本教程中 我们将学习遍历字符串的每个字符 要理解此示例 您应该了解以下Java编程主题 示例1 使用for循环遍历字符串的每个字符 示例class Main public static void
  • Python第三课

    枭 Python第三课 今天讲解了Python的 深浅复制 列表排序与逆序 随机数 列表推导式 深浅复制 浅复制 概念 浅复制是生成一个新的列表 把原列表的所有引用全复制到新列表中 切片返回的就是浅复制 在浅复制中 如若旧列表中包含有列表
  • 图的存储和遍历

    一 图的存储 因为图中既有节点 又有边 节点与节点之间的关系 因此 在图的存储中 只需要保存 节点和 边关系即可 节点保存比较简单 只需要一段连续空间即可 1 邻接矩阵 因为节点与节点之间的关系就是连通与否 即为0或者1 因此邻接矩阵 二维
  • 区块链应用到供应链上,有哪些好处?

    据中企通宝区块链技术研究中心的负责人介绍 使用区块链的最突出的优势之一 就是它可以让数据的交互性更强 由于这点 公司可以更容易地和制造商还有供应商等等来分享信息和数据 区块链的透明性可以帮助减少延迟 同时防止产品停滞在供应链 每个产品都能实
  • JWT 详解

    1 JWT是什么 JSON Web Token JWT 是一个开放标准 RFC 7519 它定义了一种紧凑的 自包含的方式 用于作为JSON对象在各方之间安全地传输信息 该信息可以被验证和信任 因为它是数字签名的 2 JWT和传统Sessi
  • 竞赛 Yolov安全帽佩戴检测 危险区域进入检测 - 深度学习 opencv

    1 前言 优质竞赛项目系列 今天要分享的是 Yolov安全帽佩戴检测 危险区域进入检测 学长这里给一个题目综合评分 每项满分5分 难度系数 3分 工作量 3分 创新点 4分 该项目较为新颖 适合作为竞赛课题方向 学长非常推荐 更多资料 项目
  • 用友U8+产品--操作系统、数据库、浏览器推荐支持一览表

    目录 业务场景 用友U8 各版本服务器安装 Windows 操作系统推荐一览表 用友U8 各版本客户端安装 Windows 操作系统推荐一览表 用友U8 各版本数据库安装 SQL Server 版本推荐一览表 用友U8 各版本WEB门户 浏
  • 物联网如何为智慧城市提供动力

    智慧城市可以创造一个基础设施顺畅 效率提升的乌托邦 改善城市地区的生活质量 促进当地经济发展 其影响意义重大 预计到 2024 年智慧城市基础设施的收入将超过 1000 亿美元 从改善公共交通到解决犯罪问题和提高能源效率 应有尽有 智慧城市
  • 基于卷积神经网络cnn的情感分析代码

    说先看一下这个图 它大体介绍了CNN的自然语言处理流程 1 首先每个单词对应一行 d 5表示分了5个维度 一般是分128维 300维之类的 这里为了方便 用d 5 这样的话矩阵就是7 5 2 然后第一步进行卷积的操作 分别使用了四行的卷积核
  • 机器学习面试笔记

    本文结合 百面机器学习 一书进行整理 1 为什么需要对数值类型的特征做归一化 对数值类型归一化可以将所有的特征都统一到一个大致相同的数值区间内 常用方法 1 线性函数归一化 对原始数据进行线性变换 使结果映射到 0 1 范围内 公式 2 零
  • 【数据异常校验】肖维勒准则(Chauvenet Criterion)处理异常数据

    介绍 在统计理论中 肖维勒准则 以William Chauvenet命名 是评估一组实验数据 一组异常值 是否可能是虚假的一种手段 肖维勒准则背后的想法是找到一个以正态分布的均值为中心的概率带 它应该合理地包含数据集的所有n个样本 通过这样
  • 在ios系统上实现更改IP地址

    在当今的互联网环境中 我们经常需要更改手机的IP地址来避免一些限制或保护我们的隐私 然而 在iOS系统上 更改IP地址并不像在其他平台上那么容易 因此 本文将分享一种简单的方法 帮助您在iOS系统上免费更改手机的IP地址 在iOS系统上 我
  • html账号不能为空,在HTML5 中,( )属性用于规定输入框填写的内容不能为空,否则不允许用户提交表单。...

    AT89C51单片机串行口的4种工作方式中 中则和的波特率是可调的 与定时器 计数器T1的溢出率有关 另外两种方式的波特率是固定的 协助扩散就是协同运输 属性输入是物质从高浓度侧转运到低浓度侧 不需要消耗能量 用于允许用户Task 2 Fi
  • stm32 hal库接收不定长数据程序

    协议层 串口通讯的数据包由发送设备通过自身的 TXD 接口传输到接收设备的 RXD 接口 在串口通讯的协议层中 规定了数据包的内容 它由启始位 主体数据 校验位以及停止位组成 通讯双方的数据包格式要约定一致才能正常收发数据 其组成见图 波特