1 #ifndef __SWM341_CRC_H__ 2 #define __SWM341_CRC_H__ 3 4 5 typedef struct { 6 uint32_t init_crc; // 初始值 7 uint8_t Poly; // CRC多项式,可取值CRC_POLY_11021、CRC_POLY_107、CRC_POLY_18005、CRC_POLY_104C11DB7 8 uint8_t in_width; // 输入数据宽度,可取值CRC_WIDTH_32、CRC_WIDTH_16、CRC_WIDTH_8 9 uint8_t in_rev; // 输入数据翻转,可取值CRC_REV_NOT、CRC_REV_ALL、CRC_REV_IN_BYTE、CRC_REV_BYTE 10 bool in_not; // 输入数据取反 11 uint8_t out_rev; // 输出结果翻转,可取值CRC_REV_NOT、CRC_REV_ALL、CRC_REV_IN_BYTE、CRC_REV_BYTE 12 bool out_not; // 输出结果取反 13 } CRC_InitStructure; 14 15 16 #define CRC_POLY_11021 0 // x^16+x^12+x^5+1 17 #define CRC_POLY_107 1 // x^8+x^2+x+1 18 #define CRC_POLY_18005 2 // x^16+x^15+x^2+1 19 #define CRC_POLY_104C11DB7 3 // x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1 20 21 #define CRC_WIDTH_32 0 22 #define CRC_WIDTH_16 1 23 #define CRC_WIDTH_8 2 24 25 #define CRC_REV_NOT 0 // bit顺序不变 26 #define CRC_REV_ALL 1 // bit顺序完全翻转 27 #define CRC_REV_IN_BYTE 2 // bit顺序字节内翻转 28 #define CRC_REV_BYTE 3 // 仅字节顺序翻转 29 30 31 void CRC_Init(CRC_TypeDef * CRCx, CRC_InitStructure * initStruct); 32 void CRC_SetInitVal(CRC_TypeDef * CRCx, uint32_t init_crc); 33 34 35 /****************************************************************************************************************************************** 36 * 函数名称: CRC_Write() 37 * 功能说明: CRC写入数据 38 * 输 入: uint32_t data 要写入的数据 39 * 输 出: 无 40 * 注意事项: 无 41 ******************************************************************************************************************************************/ CRC_Write(uint32_t data)42static __INLINE void CRC_Write(uint32_t data) 43 { 44 CRC->DATAIN = data; 45 } 46 47 /****************************************************************************************************************************************** 48 * 函数名称: CRC_Result() 49 * 功能说明: 获取CRC计算结果 50 * 输 入: 无 51 * 输 出: uint32_t CRC 计算结果 52 * 注意事项: 无 53 ******************************************************************************************************************************************/ CRC_Result(void)54static __INLINE uint32_t CRC_Result(void) 55 { 56 return CRC->RESULT; 57 } 58 59 #endif //__SWM341_CRC_H__ 60