如大家所说,CRC校验通常用在通讯验证上。
但凡通讯都有误码率,使用CRC校验可以发现是否出现错误。
MCU自带的CRC校验,属于硬件计算,不会耗费MCU的指令,可以腾出时间做更重要紧迫的事。
不过,STM32的硬件CRC校验是32位的。有时候会需要使用8位或16位CRC校验,这种情况就无法使用硬件CRC校验了。
另外,CRC还有个生成式项式。通讯双方除了约定校验位数,还要约定生成多项式。
MCU有个默认的一成多项式:0x4C11DB7。印象中这个生成多项式主要用在网络通讯上。
如果通讯协议中的生成多项式不是这个,就尴尬了。好在部分芯片支持可编程的多项式,比如STM32F3,STM32F0,STM32L0
因为有位数和多项式的限制,还是学习自己编写CRC校验还是有必要的。