利用STM32硬件CRC模块实现常规的CRC算法,相比软件模拟,可以显著提高计算效率,常用于通信数据、升级文件、固件包校验。
硬件CRC模块运算速度快,但对于OS场景中的多线程,需要考虑CRC模块的资源共享保护,否则导致计算结果不可靠。另外由于 CRC模块初始化完成后,只支持一种算法运算,对于一个项目或者产品在同一个MCU中需要用到多种CRC算法,则每次切换时需要重新初始化CRC模块,这个初始化过程会占用一定的时间。需要考虑CRC算法的切换频率,综合苹果初始化时间和软件CRC之间的比较,在一个平衡点上选择软件CRC还是硬件CRC。因此,硬件CRC也不一定就是最好的选择。
- CRC-32
#include "crc.h"
static CRC_HandleTypeDef hcrc;