STM32 CRC寄存器操作

//CRC.C
 
/*************************************************************************************************/
 /*  STM32 CRC  */
 //20120427
 

#include "stm32f10x_map.h"
 #include "system.h"
 #include "crc.h"
 

/*************************************************************************************************************************
 * 函数  :  void CRC_Reset(void)
 * 功能  :  复位CRC
 * 参数  :  无
 * 返回  :  无
 * 依赖  :  底层宏定义
 * 作者  :  陈鹏
 * 时间  :  20120427
 * 最后修改时间 : 20120427
 * 说明  : 复位CRC
 *************************************************************************************************************************/
 void CRC_Reset(void)
 {
 CRC->CR = 0x00000001;
 //复位CRC_DR
 }
 

/*************************************************************************************************************************
 * 函数  :  void CRC_Init(void)
 * 功能  :  初始化CRC模块
 * 参数  :  无
 * 返回  :  无
 * 依赖  :  底层宏定义
 * 作者  :  陈鹏
 * 时间  :  20120427
 * 最后修改时间 : 20120427
 * 说明  : 使能CRC时钟
 *************************************************************************************************************************/
 void CRC_Init(void)
 {
 DeviceClockEnable(DEV_CRC,ENABLE);
 //使能CRC时钟
 CRC_Reset();  //复位CRC
 }
 

/*************************************************************************************************************************
 * 函数  :  u32 CRC_CalculateCRC(u32 data)
 * 功能  :  计算单个数据32BIT CRC
 * 参数  :  计算的数值
 * 返回  :  32BIT CRC校验值
 * 依赖  :  底层宏定义
 * 作者  :  陈鹏
 * 时间  :  20120427
 * 最后修改时间 : 20120427
 * 说明  : 计算CRC,每次写入前要清除寄存器,即复位CRC
 *************************************************************************************************************************/
 u32 CRC_CalculateCRC(u32 data)
 {
 CRC_Reset();  //复位CRC
 CRC->DR = data;
 //写入要生成CRC的数据
 return CRC->DR;
 //返回CRC
 }
 

/*************************************************************************************************************************
 * 函数  :  u32 CRC_CalculateBlockCRC(u8 pBuffer[], u32 BufferLength)
 * 功能  :  计算缓冲区中的数据的CRC
 * 参数  :  pBuffer[]:缓冲区指针,BufferLength:缓冲区大小
 * 返回  :  32BIT CRC校验值
 * 依赖  :  底层宏定义
 * 作者  :  陈鹏
 * 时间  :  20120502
 * 最后修改时间 : 20120502
 * 说明  : 写入前先复位CRC
 *************************************************************************************************************************/
 u32 CRC_CalculateBlockCRC(u8 pBuffer[], u32 BufferLength)
 {
 u32 i;
 

CRC_Reset();  //复位CRC
 for(i = 0;i < BufferLength;i++)
 CRC->DR = (u32)pBuffer[i];
 //循环写入数据
 
return CRC->DR;
 //返回CRC
 }
 

//CRC.H
 
/*************************************************************************************************/
 /*  STM32 CRC  */
 //20120427
 

#ifndef _CRC_H_
 #define _CRC_H_
 

#include "stm32f10x_map.h"
 #include "system.h"
 #include "crc.h"
 

void CRC_Init(void);  //初始化CRC模块
 void CRC_Reset(void);  //复位CRC
 u32 CRC_CalculateCRC(u32 data);  //计算32BIT CRC
 u32 CRC_CalculateBlockCRC(u8 pBuffer[], u32 BufferLength);
 //计算缓冲区中的数据的CRC
 

#endif

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/e76908b23ecd1bfd18607f46550a8d42.html