【STM32】CRC(循环冗余校验)

一、CRC的背景知识

1、什么是CRC

(1)CRC(Cyclic Redundancy Check),循环冗余校验
(2)什么是校验,为什么需要校验:数据传输,数据存储过程中需要使用到的
(3)什么是冗余:表示比实际上要传输的数据还要多
(4)校验实现的关键:冗余少、运算少、识错纠错能力强(有些算法只能识别错误但是无法纠错)

2、CRC原理介绍

(1)(N,K)码:N=K(数据信息)+R(校验码),K位信息码,R位校验码,N位总信息长度
(2)CRC多项式:由K位信息码计算得到R位校验码的算法,以移位(左移,右移)mod2(取余)为主的叠加

3、CRC的实现方法:软件OR硬件

(1)纯软件实现,靠CPU的运算能力硬算。好处纯软件,坏处效率低(因为占用CPU资源)
(2)纯软件实现,查表确定。好处纯软件效率高,坏处死板且占内存(在表中查找相当于在内存中进行搜索)
(3)硬件实现,靠SoC内置的CRC运算模块实现(内部外设),类似于集成显卡(STM32就是使用内置的CRC)
(4)硬件实现,靠SoC外置的运算模块实现,类似于独立显卡,没必要。

4、CRC使用场景

主要用于数据传输和存储过程中随机引起的错误。但是CRC只能检验错误,但是无法纠错。

二、STM32使用CubeMX

1.CRC生成多项式计算

1.CRC16

1)CRC16表示最高位应该是2的16次方

2)因为是16,所以最高位16的系数应该是1,不能是0

3)0-15位,所以最高位16的系数不计算进去

4)1*x^16(不计算进去)+1*x^15+1*x^2+1*x^0=1000 0000 0000 0101=8005

2.配置

1.配置CRC

2.使用串口

3.HAL_CRC_Calculate  VS  HAL_CRC_Accumulate

Calculate和accumulate两者不同

calculate的计算与上一次的计算结果无关

accumulate的计算结果是从上一次的计算结果来的

如果你的计算是分成多次计算来实现,则调用【HAL_CRC_Accumulate】,如果算法是一次性实现完成则调用【HAL_CRC_Calculate 】

4.使用串口,添加串口相关的代码

在usart.c文件中添加

#ifdef __GNUC__//当前在Linux系统下#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else//在windows下#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
/*** @brief  Retargets the C library printf function to the USART.* @param  None* @retval None*/
//PUTCHAR_PROTOTYPE 宏是一个用户在使用HAL库时可以自定义的宏,
//用于实现 printf 函数的输出重定向。
PUTCHAR_PROTOTYPE
//int fputc(int ch, FILE *f)
{/* Place your implementation of fputc here *//* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);return ch;
}

5.代码编写

1.使用HAL_CRC_Calculate

/* USER CODE BEGIN PV */
uint32_t buf[]={0x11111111,0x22222222};//要发送的数据,自己随便定义一个
//存放crc
uint32_t crcValue=0;
/* USER CODE END PV */while (1){//调试printf("使用rcr成功");HAL_Delay(100);printf("CRC test\r\n");//使用crc算法将发送的值记录起来crcValue=HAL_CRC_Calculate(&hcrc,buf,sizeof(buf)/sizeof(buf[0]));printf("crcValue=%x\r\n",crcValue);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}

2.验证传输过程是否正确

CRC在线计算 (lddgo.net)

与串口输出的数值进行比较,判断是否正确---->结果正确

3.注意点

0和任何值异或,原值不变

不同点:

1)结果异或值的不同

2)数据反转不同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/199772.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】聚合函数、group by、update、delete

聚合函数、group by、update、delete 前言正式开始update将孙悟空同学的数学成绩变更为 80 分将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分将总成绩倒数前三的 3 位同学的数学成绩加上 30 分将所有同学的语文成绩更新为原来的 2 倍 delete删除孙悟空同…

51单片机/STM32F103/STM32F407学习1_点亮LED灯

目录: 基础知识单片机从0实现单片机GPIO介绍 参考连接: 野火霸天虎教程 https://doc.embedfire.com/products/link/zh/latest/mcu/stm32/ebf_stm32f407_batianhu_v1_v2/download/stm32f407_batianhu_v1_v2.html x.1 基础知识 x.1.1 指针中的取地址&a…

Wireshark的数据包它来啦!

通过Wireshark工具,可以轻松的看到网卡的数据信息。通过Wireshark显示的数据包内容信息,通常分七栏,介绍一下: 1No.: 数据包编号。 2.Time Time显示时间,以1号数据包发生开始计时。 3.Source Source显示内容…

Redis篇---第十二篇

系列文章目录 文章目录 系列文章目录前言一、Memcache与Redis的区别都有哪些?二、单线程的redis为什么这么快三、redis的数据类型,以及每种数据类型的使用场景前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇…

【变换器Transformers · 巴伦 - - 平衡与非平衡Baluns and ununs】

目录 1. 介绍2. 常见巴伦应用3. 巴伦理论与平衡系统和非平衡系统简介4. 常见的双端系统:4.1. 射频馈线4.2. 负载4.3. 信号源 5. 巴伦模式与技术6. 铁芯线平衡-不平衡转换器(隔离和自耦变压器平衡-不平衡转换器)7. 传输线的平衡巴伦和变阻抗巴…

筒仓料位监测|敢不敢对“精度”下狠手!您家筒仓料位测得准吗?

您家是不是还在人工敲仓估算? 您能精确知道料位和库存吗? 您能实时看到库存盈亏吗? 筒仓里装了什么?用了多少? 什么时候进料最划算? 您家的筒仓管理方式可靠吗? 上海思伟筒仓料位监测方案 看…

1.rk3588的yolov5运行:pt_onnx_rknn转换及rknn在rk3588系统python运行

自己有点笨,查资料查了一周才完美的实现了yolov5在rk3588环境下的运行,在这里写具体步骤希望大家少走弯路。具体步骤如下: 一、yolov5的原代码下载及pt文件转换为onnx文件 1.yolov5的原代码下载及环境搭建 在这里一定要下载正确版本的源代码…

1. 基础语法

文章目录 一些基本的概念JDK 和JREJava语言的编译原理编译器和jdk的安装 编译器的基础介绍新建项目的规范src文件介绍src规范强调包 ModuleIJ的一些特殊的操作分屏写代码去掉代码提示的大小写限制注释设置文件编码设置 设置回车快捷键 Java语法基本概念关键字修饰符 与 非修饰符…

一篇文章让你彻底了解Java算法「十大经典排序算法」

✍️作者简介:码农小北(专注于Android、Web、TCP/IP等技术方向) 🐳博客主页: 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN 🔔如果文章对您有一定的帮助请👉关注✨、点赞&…

5款免费BI数据可视化工具,2023年最新精选推荐!

BI可视化工具顾名思义是进行数据分析和可视化的软件,旨在将数据以表格、图表、仪表盘等形式展示出来,让用户能够更加直观了解其业务状况、发现问题,并在必要时进行决策。   市面上BI数据可视化工具很多,目前比较火的像国外的Tabl…

文本转语音

免费工具 音视频转译 通义听悟 | https://tingwu.aliyun.com/u/wg57n33kml5nkr3p 音色迁移 speechify | https://speechify.com/voice-cloning/ 视频生成 lalamu | http://lalamu.studio/demo/ 画质增强 topazlabs video AI | https://www.topazlabs.com 付费工具 rask | htt…

亚马逊出口电热毯日本PSE认证需要什么资料解析

电热毯出口日本需要办理PSE认证,电热毯,又名电褥,是一种接触式电暖器具。 PSE认证介绍是日本强制性认证,包含安全及EMI,用以证明电子电气等产品符合日期电气用品安全法或国际IEC标准的要求。日本电气用品安全法规定&am…

做外贸要学会分析客户情况

最近在某产品的专业群里询问一款产品,看谁可以做,然后很快就有一个自称是工厂的人加上了我。因为自己本身并不懂这个产品,很多他们发的问题自己都答不上来。我就如实告诉他自己是个新手,可以把你们现在能做的,或者已经…

openfeign整合sentinel出现异常

版本兼容的解决办法:在为userClient注入feign的接口类型时,添加Lazy注解。 Lazy注解是Spring Framework中的一个注解,它通常用于标记Bean的延迟初始化。当一个Bean被标记为Lazy时,Spring容器在启动时不会立即初始化这个Bean&…

什么是多域名证书?

多域名证书是指同一个证书中包含多个域名,能够在多个站点之间共享一份证书,实现一个站点对应多个域名的情况。多域名证书非常适合需要跨多个站点部署的应用,例如企业的子站点、博客等。 特点 多域名证书的优点包括以下几个方面:…

如何通过cpolar内网穿透工具实现远程访问本地postgreSQL

文章目录 前言1. 安装postgreSQL2. 本地连接postgreSQL3. Windows 安装 cpolar4. 配置postgreSQL公网地址5. 公网postgreSQL访问6. 固定连接公网地址7. postgreSQL固定地址连接测试 前言 PostgreSQL是一个功能非常强大的关系型数据库管理系统(RDBMS),下…

十二、Docker的简介

目录 一、介绍 Docker 主要由以下三个部分组成: Docker 有许多优点,包括: 二、Docker和虚拟机的差异 三、镜像和容器 四、Docker Hub 五、Docker架构 六、总结 一、介绍 Docker 是一种开源的应用容器平台,可以在容器内部…

Java编程技巧:将图片导出成pdf文件

目录 一、pom依赖二、代码三、测试链接四、结果展示 一、pom依赖 <!-- pdf插件 start --> <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.3</version> </dependency> &l…

SpringDoc基础配置和集成OAuth2登录认证教程

本期内容 学会通过注解和Java代码的方式添加SpringDoc配置。在swagger-ui提供的页面上提供OAuth2登录认证&#xff0c;在集成Security的情况下便捷获取access_token并在请求时按照OAuth2规范携带。 为什么集成OAuth2登录认证&#xff1f; 现在大部分教程是在swagger-ui页面添…

Linux操作系统使用及C高级编程-D6-D8Linux shell脚本

利用shell命令写的脚本文件&#xff0c;后缀是.sh shell脚本是一个解释型语言&#xff0c;不需要编译&#xff0c;可直接执行 书写&#xff1a;vi test.sh #!/bin/bash&#xff1a;说明使用的是/bin目录下的bash 说明完后即可编写脚本文件 bash test.sh&#xff1a;运行文…