您的位置 首页 设计

STM32F10x 学习笔记3(CRC核算单元)

STM32F系列的单片机内部带了CRC32计算单元。这个内置CRC模块的方法使用非常简单。其操作如下图所示。图1CRC计算单元框图归纳起来有如下几步…

STM32F系列的单片机内部带了CRC32核算单元。这个内置CRC模块的办法运用十分简略。其操作如下图所示。

图1CRC核算单元框图

归纳起来有如下几步操作:

1. 舱位CRC单元的时钟。RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE)
2. 复位CRC模块(设置CRC_CR=0x01),这个操作把CRC余数初始化为0xFFFFFFFF
3. 把要核算的数据按逐一地写入CRC_DR寄存器
4. 写完一切的数据字后,从CRC_DR寄存器读出核算的成果

STM32F10x StdPeriph Driver 中供给了几个函数。

CRC_ResetDR(void)
用来复位CRC模块。

uint32_t CRC_CalcCRC(uint32_t Data)
将一个数据写入CRC_DR寄存器,返回值为核算成果。

uint32_t CRC_CalcBlockCRC(uint32_t pBuffer[], uint32_t BufferLength)
核算一个数组的CRC 值。

uint32_t CRC_GetCRC(void)
读取CRC_DR寄存器的成果。

别的,CRC 模块中还有个独立数据寄存器(CRC_IDR)。这是个单字节的寄存器,用于暂时寄存1字节的数据,不受复位操作影响。相应的操作函数有两个。

void CRC_SetIDRegister(uint8_t IDValue)
uint8_t CRC_GetIDRegister(void)
分别是写CRC_IDR和读 CRC_IDR 寄存器。

尽管STM32F 上的CRC 单元用起来很简略,可是好像它核算出来的成果与传统的CRC32算法得到的成果有些不同。
下面是个简略的比如。

  1. #include”stm32f10x.h”
  2. intmain(void)
  3. {
  4. uint32_tj;
  5. uint32_tstr[11]={1,2,3,4,5,6,7,8,9,};
  6. SystemInit();
  7. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);
  8. CRC_ResetDR();
  9. str[9]=CRC_CalcBlockCRC(str,1);
  10. CRC_ResetDR();
  11. CRC_CalcCRC(0xA5A5A5A5);
  12. j=CRC_GetCRC();
  13. CRC_CalcCRC(j);
  14. for(;;)
  15. {
  16. }
  17. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/sheji/264207.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部