SWM341_crc.h 2.4 KB

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