首页 > 编程知识 正文

spi写寄存器和写数据,单片机crc校验程序

时间:2023-05-05 20:37:50 阅读:170762 作者:3899

[讨论] Hex文件格式CRC检查

SPI_CRCPolynomial库函数的SPI初始化需要

SPI _ init structure.SPI _ CRC polynomial=7;

我的疑问是,使用STM32控制nRF24L01时,STM32的SPI具有CRC检查功能,而nRF24L01的SPI没有CRC检查功能。 如何才能实现通信呢?

根据数据手册,发送数据后发送CRC; 接收数据时接收完数据后,比较接收的CRC和接收时计算的CRC是否相同。 问题是RF IC没有发送CRC吗?

请大家指教!

----- -涉及数据手册中的CRC

22.3.6 CRC计算

CRC校验仅用于保证全双工通信的可靠性。 数据发送和数据接收分别使用不同的CRC计算机。

通过对每个接收比特进行可编程多项式运算来计算CRC。 CRC的计算是SPI_CR1寄存器

在中由CPHA和CPOL位定义的采样时钟的边沿发生。

注:根据选择的发送和接收数据的帧格式,此SPI接口提供两种CRC计算方法。 这意味着8位数据帧提取

使用CR8; 16位数据帧采样CRC16-CCITT。

通过设置SPI_CR1寄存器的CRCEN位启用CRC计算。 在设置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位指示硬件是最后的

1数据字节发送完成后,发送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传输

期限会保持很低。

没有生效啊。 启用的是其他地方的配置。 即使配置了spi_CRCPolynomial,或者没有使用SPI模块,也没有关系。

应该使用SPI_Transmitcrc和SPI_CalculateCRC函数启用CRC发送功能

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。