STM8 CRC计算 CRC校验仅用于保证通信的可靠性。数据发送和数据接收分别使用单独的CRC计算器。通过对每一个接收位进行可编程的多项式运算来计算CRC。CRC的计算是在由SPI_CR1寄存器中CPHA和CPOL位定义的采样时钟边沿进行的。
CRC计算是通过设置SPI_CR1寄存器中的CRCEN位启用的。设置CRCEN位时同时复位CRC寄存器(SPI_RXCRCR和SPI_TXCRCR)。当设置了SPI_CR2的CRCNEXT位,SPI_TXCRCR的内容将在当前字节发送之后发出。
如果Tx缓冲区中已经有一个字节,该字节发送完成后再发送CRC值。在发送CRC值的过程中,CRC计算器被关闭,CRC寄存器的值保持不变。 如果在发送SPI_TXCRCR值的过程中,接收到移位寄存器中的值和SPI_RXCRCR的值不匹配,SPI_SR寄存器中的CRCERR标志被置位。 SPI通信可以通过以下步骤使用STM8的CRC: - 设置CPOL、CPHA、LSBFirst、BR、SSM、SSI和MSTR的值;
- 在SPI_CRCPR寄存器输入多项式;
- 通过设置SPI_CR1寄存器CRCEN位使能CRC计算,该操作也会清除寄存器SPI_RXCRCR和SPI_TXCRCR;
- 设置SPI_CR1寄存器的SPE位启动SPI功能;
- 启动通信并且维持通信,直到只剩最后一个字节未被发送或者接收;
- 当把最后一个字节写进发送缓冲器, 设置SPI_CR2的CRCNext位,指示硬件在最后一个数据节发字送完成后,发送CRC。在发送CRC期间,CRC计算停止;
- 当最后一个字节被发送后,SPI发送CRC,CRCNext位被复位。同样,接收到的CRC和SPI_RXCRCR值进行比较,如果比较不相配,SPI_SR上的CRCERR标志被置位,当设置了SPI_ICR寄存器的ERRIE时,则产生中断。
注意:时当SPI钟频率较高时,用户在采用CRC校验传输时必须小心。在采用CRC数据校验的全部传输期间内,使用CPU的时间应尽可能少。为了避免在接收最后的数据和CRC时出错,在发送带有CRC校验值的数据传输过程中应禁止函数调用。 |