嵌入式stm32f103 CRC校验程序
时间: 2023-08-24 11:04:47 浏览: 104
以下是嵌入式STM32F103 CRC校验程序的示例代码:
```c
#include "stm32f10x.h"
uint32_t crc_calc(uint8_t* pData, uint32_t len);
int main(void)
{
uint8_t data[] = {0x12, 0x34, 0x56, 0x78, 0x9a};
uint32_t crc = 0;
crc = crc_calc(data, sizeof(data));
return 0;
}
uint32_t crc_calc(uint8_t* pData, uint32_t len)
{
uint32_t crc = 0xFFFFFFFF;
uint32_t i;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
for (i = 0; i < len; i++) {
crc = CRC_CalcCRC(pData[i]);
}
return crc ^ 0xFFFFFFFF;
}
```
该程序使用STM32F103的硬件CRC模块进行CRC校验计算。在主函数中,定义了要计算CRC的数据,然后调用crc_calc函数进行计算。在crc_calc函数中,首先使能CRC时钟并初始化CRC寄存器,然后遍历数据并逐个计算CRC值。最后,返回计算出的CRC值。
相关问题
嵌入式stm32f103 CRC校验
嵌入式stm32f103可以使用硬件CRC校验功能,该功能可以快速计算数据的CRC校验值。
以下是使用硬件CRC校验功能进行CRC校验的步骤:
1. 使能CRC时钟。
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
2. 配置CRC计算方式。
CRC_ResetDR();
CRC_InitStructure.CRCLength = CRC_CRCLength_32Bit;
CRC_InitStructure.DefaultPolynomialUse = DEFAULT_POLYNOMIAL_ENABLE;
CRC_InitStructure.DefaultInitValueUse = DEFAULT_INIT_VALUE_ENABLE;
CRC_InitStructure.InputDataInversionMode = CRC_InputDataInversion_None;
CRC_InitStructure.OutputDataInversionMode = CRC_OutputDataInversion_Disable;
CRC_Init(&CRC_InitStructure);
3. 向CRC数据寄存器填充数据。
CRC_ResetDR();
CRC_CalcCRC(data, length);
4. 读取CRC校验值。
crc = CRC_GetCRC();
注意事项:
1. 在进行CRC校验之前,需要先配置好CRC计算方式。
2. 数据长度必须是4的倍数,否则会出现计算错误。
3. 在使用硬件CRC校验功能时,需要将数据按照大端模式写入CRC数据寄存器。
阅读全文