STM32的CRC计算
CRC计算
CRC校验仅用于保证全双工通信的可靠性。数据发送和数据接收分别使用单独的CRC计算器。
通过对每一个接收位进行可编程的多项式运算来计算CRC。CRC的计算是在由SPI_CR1寄存器
中CPHA和CPOL位定义的采样时钟边沿进行的。
注意: 该SPI接口提供了两种CRC计算方法,取决于所选的发送和/或接收的数据帧格式:8位数据帧采
用CR8;16位数据帧采样CRC16-CCITT。
CRC计算是通过设置SPI_CR1寄存器中的CRCEN位启用的。设置CRCEN位时同时复位CRC寄
存器(SPI_RXCRCR和SPI_TXCRCR)。当设置了SPI_CR1的CRCNEXT位,SPI_TXCRCR的内
容将在当前字节发送之后发出。
注意: 在传输SPI_TXCRCR的内容时,如果在移位寄存器中收到的数值与SPI_RXCRCR的内容不匹
配,则SPI_SR寄存器的CRCERR标志位被置1。如果在TX缓冲器中还有数据,CRC的数值仅在
数据字节传输结束后传送。在传输CRC期间,CRC计算器关闭,寄存器的数值保持不变。
注意: 请参考产品说明书,以确认有此功能(不是所有型号都有此功能)。
SPI通信可以通过以下步骤使用CRC:
● 设置CPOL、CPHA、LSBFirst、BR、SSM、SSI和MSTR的值;
● 在SPI_CRCPR寄存器输入多项式;
● 通过设置SPI_CR1寄存器CRCEN位使能CRC计算,该操作也会清除寄存器SPI_RXCRCR
和SPI_TXCRC;
● 设置SPI_CR1寄存器的SPE位启动SPI功能;
● 启动通信并且维持通信,直到只剩最后一个字节或者半字;
● 当把最后一个字节或半字写进发送缓冲器,设置SPI_CR1的CRCNext位,指示硬件在最后
一个数据字节发送完成后,发送CRC。在发送CRC期间,CRC计算停止;
● 当最后一个字节或半字被发送后,SPI发送CRC,CRCNext位被清除。同样,接收到的
CRC和SPI_RXCRCR值进行比较,如果比较不相配,SPI_SR上的CRCERR标志被置位,
当设置了SPI_CR2寄存器的ERRIE时,则产生中断。
注意: 当SPI时钟频率较高时,用户在发送CRC时必须小心。因为在CRC传输期间,使用CPU的时间
应尽可能少。为了避免在接收最后的数据和CRC时出错,在发送CRC过程中应禁止函数调用。
当SPI时钟频率较高时,建议采用DMA模式以避免SPI速度性能的降低。
当STM32F10xxx配置为从模式并且使用了NSS硬件模式,NSS管脚应该在数据传输和CRC传输
期间保持为低。
STM32的CRC计算相关推荐
- STM32CubeIDE开发(十), stm32的CRC计算CubeMX配置及HAL库底层实现分析
一.stm32的CRC 1.1 CRC的简介及MCU关联说明 STM32的CRC(Cyclic Redundancy Check,循环冗余校验)计算单元使用一个固定的多项式发生器,从一个32位的数据字 ...
- crc 校验错误_资深工程师:图说CRC原理应用及STM32硬件CRC外设
在嵌入式产品应用中,常常需要应对系统数据在存储或者传输过程中的完整性问题.所谓完整性是指数据在其生命周期中的准确性和一致性.这些数据可能存储在EEPROM/FLASH里,或者基于通信协议进行传输,它们 ...
- 使用Python写的CRC计算工具
公司需要加入域,强迫安装了McAfee杀毒软件,把我常用的一个CRC计算工具给删了,还无法添加白名单,心中千万只草拟吗.所以只好自己写一个同时支持字符串和文件的CRC16/32计算工具. 已打包好的执 ...
- STM32 CAN波特率计算
STM32 CAN波特率计算 简介 CAN总线收发,中断方式接收配置 代码部分 reference 简介 CAN通信帧共分为数据帧.远程帧.错误帧.过载帧和帧间隔,本文这里以数据帧为例. 显性电平对应 ...
- 不同开发语言 CRC 计算 CRC-16/XMODEM
做的软件需要个单片机打交道,通讯走的TCP里面校验数据CRC了. 因为用到了不同语言,所以整理下这块的使用. 1. go 语言 CRC 计算 CRC-16/XMODEM var crc16tab = ...
- CRC校验工具 校验码自动生成软件支持十几种CRC计算方式
CRC校验工具 校验码自动生成软件支持十几种CRC计算方式,包括MODBUS协议的CRC-16校验,CRC4.CRC5.CRC6.CRC7.CRC8.CRC16等21种算法,见图示.id=620738 ...
- Linux 大文件crc计算,CRC计算方法与C实现
CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验.它是一类重要的线性分组码,编码和解码方法简单,检错和纠错能力强,在通信领域广泛地用于实现差错控制.实际上,除数据通 ...
- STM32 定时器定时计算
STM32 定时器定时计算 STM32 定时器频率 例子 公式 reference STM32 定时器频率 定时时间 = 定时器频率 / 倍频 /装载周期 htim1.Init.Prescaler = ...
- STM32开发 -- CRC校验码
如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/79518638 通信协议里有CRC校验码,计算从报文的起始字节到报文内容最后一 ...
最新文章
- html离开页面时,js实现用户离开页面前提示是否离开此页面的方法(包括浏
- 追根究底之追本溯源:光标
- Bmob图片上传遇到的坑
- Taxlive2020安装~新手向
- swfheader 0.10 Released(已更正下载地址)
- 解读腾讯极速高清AR-SR的画质改善机制
- Oracle11gR2_ADG管理之恢复主库的truncate表实战
- kotlin 复制对象属性_Kotlin 怎么学 ?遇到过哪些坑?
- 火星上首座虚拟房屋以超过50万美元价格售出
- 【网络信息安全】网络信息安全概述
- linux 设置防火墙ip网段,网络防御-防火墙设置IP网段规则
- SpringBoot日志
- PyCharm4注册码
- 微信小程序登录获取手机号获取不到偶发性问题
- jQuery ajax 请求 和 Submit 提交 form 表单
- Josephus问题(最后一个退出的人)
- 英读廊——尬跑一英里
- 03_建立 Windows 和虚拟机 Ubuntu 共享文件夹
- kubectl使用参数--kubeconfig指定不同 .kube/config 文件访问以不同集群
- XPS文件如何在线转成Word
热门文章
- 手机网站支付宝接入iframe无法唤醒支付宝app
- BS客户端安全使用解决方案
- 高端在线客服系统源码PHP外贸新版(基于Thinkphp的网站在线客服系统)
- 如何自己制作一个GIF图片
- Unity游戏Mod/插件制作教程01 - BepInEx的安装和使用
- linux qt按键精灵,按键精灵QT抢夺脚本源码
- VS2008 PRO 、WDK 和DDKWizard搭建Vista驱动开发环境
- 中国数字化手术室行业发展动态及前景战略深度研究报告2021年版
- 共享计算机资源教案,《共享网上邻居资源》课后教学反思
- unity打包tv 弹窗_Unity即将登陆Apple TV