你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

在STM32系列中使用CRC外设

[复制链接]
STMCU小助手 发布时间:2022-12-3 18:00
引言
( |. c4 z1 x3 f5 o! z9 ^/ d循环冗余校验(CRC)技术用于检测数字数据中的错误,但在检测到错误时不进行校正。该技术旨在检查数据传输或数据存储的完整性。在确保数据可靠性方面,CRC技术功能强大且易于实施。该技术的诊断覆盖范围可满足基本安全标准要求。这就是认证符合IEC 60335-1和 IEC 607030-1 标准(称为“B 级”要求)的ST固件时,在Flash内容完整性自检检查中使用CRC功能的原因。更多信息,请参阅应用笔记AN3307和适用于不同系列产品的相关固件包。当CRC校验和信息必须由链接器直接放入用户代码中时(主要以CRC描述符数据表的格式),建议在编译器手册中检查所有必要的CRC设置。CRC以多项式算法为基础。计算GF(2)中一个多项式除以另一个多项式的余数。余数被称为校验和,而被除数是数据,除数是生成多项式。. z( D6 \) c! T% }' P/ ?5 @
注: GF(2)(两元素伽罗瓦域)中的多项式是单变量x的多项式,其系数为0或1。
$ k2 z9 p8 t4 S0 t. Q! j本应用笔记描述了嵌入在所有STM32系列(F0、F1、F2、F3、F4、L1)中的循环冗余校验外设的功能,以及配置该外设所需的步骤。+ _' s- R/ e, h% o* }5 A1 }
* U/ e  H' D$ q- E+ \+ D
本应用笔记的结构如下:4 K2 h1 q0 b- F9 L3 Q" M0 R) y+ Z
• 第 1节介绍了STM32 CRC实现算法及其硬件实现优势。- e- i, m7 `2 R0 S  e
• 第 2节描述了DMA作为CRC数据传输控制器的用法。& k" m: P; _! C0 N/ o5 j
• 第 3节描述了通过STM32器件移植CRC。; O' k! V9 M" `$ A( v7 `

0 N! r& Y! ]. v0 `
此外还提供了两个示例:
( C) J! E" `6 v) ]9 z# h' ]• CRC_usage示例:如何将CPU用作数据传输控制器来配置CRC。7 T3 D2 Y' Q6 g3 y+ |+ ?1 N0 [
• CRC_DMA示例:如何将DMA用作CRC数据传输控制器。4 ?1 `( r  U5 c% K: n, ~" I& r
两个例子均支持执行时间测量。
+ H% Z5 y* M, ~/ K5 i: J; [
8 p; }# N$ Y& o+ _
TXVNYNC`[3I3(CPU}EUGGDD.png
: z) r) x6 F0 b5 Y$ M! \

& ]; M8 g/ S9 l9 ~! _, p1 CRC外设概览
5 E! x  T! \* r2 ]: R( O* s/ P嵌入在所有STM32微控制器件中的CRC外设用于提供任意支持数据类型的CRC校验和代码。  ?/ a: R% M8 W, [+ ]9 i+ j
1.1 CRC算法
/ I! N5 c0 {/ N0 {2 G& y2 ]如图 1中所示,CRC算法有一个数据输入,并根据输入参数生成固定的校验和代码长度。
( h9 `) x) y, S6 X3 a9 Y5 z3 o, a2 o7 f
- U1 |8 {2 W- J+ w0 h+ k
GGFEAC2613E24Y9X]@S$$YN.png # R. n) M+ f: ]& k- {9 S
! a: X( y9 L: ]4 q& h& c

! g* e$ j* ?/ S9 m) C已知的CRC算法之一是使用按位消息XORing技术进行多项式除法。这是微控制器中使用的最适合硬件或底层实现的技术。
* ^& n! p. q0 k! \. M$ n# b. j; O1 }该算法的输入参数为:
" V" L/ X1 o2 X2 p, l• 被除数:也称为输入数据, 缩写为 “Input_Data”
5 A+ `) y+ E- E+ [: f: T% I• 除数:也称为生成多项式,缩写为“POLY”
; s7 N2 ~/ z# Z9 ]: I/ U1 r& I• 初始CRC值:缩写为Initial_Crc”
7 E5 x- N2 o1 |/ Q3 u; i5 N/ g! ~下文的图 2显示了CRC算法流程图。
2 g- J/ `- F2 A4 W* G! n: Q$ W# @6 i# q- r0 y! }

# T( r. [$ t5 v4 ~# t; a QSYX[[F`JSSFRX[~)SIOJ_8.png : W# S8 V0 r& ~# F- M4 @
5 p% F. _9 ]7 |6 e- |; a
启动时,算法将CRC设置为带有Input_Data的Initial_Crc XOR。
) V2 I" b. j/ H% m4 l一旦CRC MSB等于1,该算法将CRC向左移一位,并与POLY进行XOR。否则,只会将CRC向左移动一位。
6 L8 z+ }+ v8 x- b' j$ x; r图 3显示了以下条件的逐步算法执行:2 s& P( U) \, B$ p- M
– Input_Data = 0xC13 `. A( d9 {/ B, ^# w; k- A4 }* B
– POLY = 0xCB
, }1 J9 r1 C; {0 _& ?– Initial_Crc = 0xFF
* T  m) \0 H" L  @, j: r8 ~- o0 E, q, l. ?. t$ S' Z9 C. C" Y
- `% l3 ~  F0 W9 h; a. j
9HX8_226]}~3]I)U8@NUG53.png
% ]: a$ r2 p! L/ t1 @
% S( B0 u( K3 G- n0 G1.2 CRC外设配置
& y2 E' E$ f6 V9 o* {% B5 R' ^; m所有STM32器件均采用CRC外设,如第 1.1节中所述。CRC计算单元具有单个32位读/写数据寄存器 (CRC_DR)。它用于输入新数据(写访问)并保存以前的CRC计算结果(读访问)。
, P, [' X" _& O! T9 }3 z对数据寄存器的每个写操作都会对之前的CRC值(存储在CRC_DR中)和新值再做一次CRC计算。0 b3 b' M0 H( I* j

2 Y. z7 m* w5 i+ S; v, l
8 y2 K, Z7 t3 ^# q+ v5 o
B}(7@DEN9PL5LLKRG6D$(OH.png ' G, N: D  L% O% m4 y5 X7 s

- u# p  }) Z: U8 ?+ k9 T要计算任何支持数据的CRC,必须遵循以下步骤:% O8 z9 G3 K  Z- P
1. 通过RCC外设启用CRC外设时钟。
' H0 C9 W% E9 A2. 通过配置初始CRC值寄存器(CRC_INIT),将CRC数据寄存器设置为初始CRC值 。(a)
% N8 f9 `9 O* c3 X9 m$ E3. 分别通过CRC控制寄存器(CRC_CR)中的REV_IN[1:0]和REV_OUT位设置I/O反转位顺序。(a)3 Z9 V. _1 b( B
4. 分别通过CRC控制寄存器(CRC_CR)和CRC多项式寄存器(CRC_POL)中的POLYSIZE[1:0]位设置多项式大小和系数。(b)
9 h4 L( ]4 k, F0 R1 h+ N5. 通过CRC控制寄存器(CRC_CR)中的Reset位重置CRC外设。: y9 U2 P4 g9 Y6 a( H  I9 U& V2 z
6. 将数据设置到CRC数据寄存器。
" `. R% }6 ^( U' r: I; R7. 读取CRC数据寄存器的内容。
, w: ]. a( e: K- w: y5 `/ n+ z/ o8. 禁用CRC外设时钟。! F( l1 f/ M# ^# r% W
在固件包中,CRC_usage示例运行CRC校验和代码,计算256个支持数据类型的数组数据; }! M7 F$ y: O7 c+ r/ c, h
(DataBuffer)。有关完整说明,请参阅CRC_usage文件夹中的文件Readme.txt 。
7 q" I' x5 e" a0 \3 Z4 I. C+ z2 \& v0 g( |
+ _6 `: Q9 A+ K/ }' l1 w* J6 B( u4 K; v* F( _* v* F3 f
完整版请查看:附件' D! S) A# L; v" N+ J

在STM32系列中使用CRC外设.pdf

下载

377.72 KB, 下载次数: 37

赞 收藏 评论0 发布时间:2022-12-3 18:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版