代码
crc.c
#include "stm32f1xx_hal.h"
// 定义一个CRC_HandleTypeDef结构体的实例,用于管理CRC模块
CRC_HandleTypeDef crc;
// CRC初始化函数,用于配置CRC模块的参数并初始化
void CRC_Init(void)
{
// 设置CRC_HandleTypeDef结构体实例的Instance成员为CRC外设的地址
crc.Instance = CRC;
// 调用HAL库提供的函数,初始化CRC模块
HAL_CRC_Init(&crc);
}
// CRC模块的初始化回调函数
void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc)
{
// 启用CRC外设的时钟,以便可以使用CRC功能
__HAL_RCC_CRC_CLK_ENABLE();
// 这个回调函数会在HAL_CRC_Init()函数中被调用
// 在这里,我们只需要开启CRC的时钟即可,不需要做其他的初始化工作
}
crc.h
#ifndef __CRC_H
#define __CRC_H
void CRC_Init(void); // 声明 CRC 初始化函数
extern CRC_HandleTypeDef crc; // 声明 CRC 外设的句柄变量,该变量在其他文件中定义
#endif
main.c
#include "stm32f1xx_hal.h" // 包含STM32 HAL库的头文件
#include "rcc.h" // 包含RCC模块的头文件
#include "uart.h" // 包含UART模块的头文件
#include "crc.h" // 包含CRC模块的头文件
uint32_t buff[4] = {0x01020304, 0x05060708, 0x090A0B0C, 0x0D0E0F00}; // 定义一个包含4个32位数据的数组
int main(void)
{
HAL_Init(); // 初始化HAL库
RccClock_Init(); // 初始化系统时钟
U1_Init(9600); // 初始化UART1串口,波特率设置为9600
CRC_Init(); // 初始化CRC模块
// 使用CRC模块计算数据缓冲区buff的CRC校验值,并通过UART打印输出
u1_printf("%x\r\n", HAL_CRC_Calculate(&crc, buff, 4));
while (1)
{
// 程序进入主循环,持续运行
}
}
|