历史上的今天
今天是:2025年02月19日(星期三)
2019年02月19日 | STM32的CRC计算
2019-02-19 来源:eefocus
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传输期间保持为低。
史海拾趣
|
先说说环境,是WINCE 5.0, S3C2440A的cpu,64M 内存,NAND FLASH,用的不是STEPLOADER,是自己用ADS写的BOOTLOADR。 之前已经看过很多关于休眠的帖子,别人遇到的问题的解决方式也试过了。 CONFIG.BIB中有这个了 S ...… 查看全部问答> |
|
大家好,我现在正在做一个练习项目:在wii开发用机器上,对U盘和SD卡内的文件进行长时间读写 代码已经完成,程序运行是有三个线程,主线程,SD读写线程,USB读写线程,后两个读写线程所用的栈空间大小是一样的。对SD和U盘的读写函数都是一样的。 ...… 查看全部问答> |
|
我想将控件对应的成员变量设置为CTime,可是在使用MFC ClassWizard 添加成员变量时,Add Member Variable对话框中Variable type选项中没有CTime选择,请教各位该如何解决?… 查看全部问答> |
|
Vishay发布业内首款在单片器件内集成了信号探测和处理功能的学习型遥控码IC 宾夕法尼亚、MALVERN — 2012 年 7 月30 日 — 日前,Vishay Intertechnology, Inc.(NYSE 股市代号:VSH)宣布,其光电子产品部 推出业内首款将信号探测和处理功能集成进单个器件的学习型遥控码IC--- VSOP98260。该器件适用于通用遥控器,通过对 ...… 查看全部问答> |




