歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

Copyright © Linux教程網 All Rights Reserved