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

【经验分享】STM32 随机数发生器相关函数和类型

[复制链接]
STMCU小助手 发布时间:2022-3-30 12:00
01. RNG概述. N+ ^% @7 {- H+ `4 S
RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数。! V5 n$ z& v; `  {( _% ~
3 ~& P# A* ?% e6 M" ~0 X. F0 C- U. b
RNG 已通过 FIPS PUB 140-2(2001 年 10 月 10 日)测试,成功率达 99%。
$ w! M2 Q$ h% P8 e/ Q  m
7 F+ ?; K2 d4 k& {! C& ~& F/ }  w( i随机数发生器支持库函数stm32f4xx_rng.c 和对应的头文件 stm32f4xx_rng.h。' `  B; i0 C( V& P* M
) Z9 v  D$ e7 T7 g' }2 ^+ |
02. 相关类型# o" W# q$ }8 l/ m" B+ b4 R
  1. /** @defgroup RNG_flags_definition  
    + q- G8 ?" N9 ]
  2.   * @{
    9 C# ^+ J3 \. r# T
  3.   */
    ( c  Z/ u) a2 Y' n
  4. #define RNG_FLAG_DRDY               ((uint8_t)0x0001) /*!< Data ready */
    3 M* D/ u, `, V  B  h, z
  5. #define RNG_FLAG_CECS               ((uint8_t)0x0002) /*!< Clock error current status */1 W  i/ K5 R6 A! x. a+ s8 J
  6. #define RNG_FLAG_SECS               ((uint8_t)0x0004) /*!< Seed error current status */' D% ^2 ?  J- W1 E4 L1 ?3 O- f

  7. " f2 O9 J9 v8 K/ u
  8. #define IS_RNG_GET_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_DRDY) || \
    , [) f8 I3 F1 B# j+ J2 C' l
  9.                                    ((RNG_FLAG) == RNG_FLAG_CECS) || \
    2 a6 N- |9 d, W7 T* x/ s6 B
  10.                                    ((RNG_FLAG) == RNG_FLAG_SECS))
    9 U$ I  e6 f  A, s5 }
  11. #define IS_RNG_CLEAR_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_CECS) || \
    2 {( L' j9 A9 t
  12.                                     ((RNG_FLAG) == RNG_FLAG_SECS))' v) X/ z. k/ r* S
  13. /**. i+ p1 z- x  U1 X3 O1 S7 `/ K' B
  14.   * @}
    & Y: _% p5 E2 m& T- h
  15.   */ * ?5 s. F7 V. R
  16. % c8 q, P7 U% i% z" v  x6 H
  17. /** @defgroup RNG_interrupts_definition   # O2 E+ f& s" P, h/ k; g7 I1 W3 g
  18.   * @{2 K* ^! `. R4 b" `
  19.   */  
    9 J4 B0 \2 m. _6 i" {
  20. #define RNG_IT_CEI                  ((uint8_t)0x20) /*!< Clock error interrupt */
    , t, p0 u. ^1 H
  21. #define RNG_IT_SEI                  ((uint8_t)0x40) /*!< Seed error interrupt */
    8 t0 U7 P9 T2 V6 J2 v! T8 F
  22. ( f+ R( `. M' K7 H8 v. Z
  23. #define IS_RNG_IT(IT) ((((IT) & (uint8_t)0x9F) == 0x00) && ((IT) != 0x00))
    $ r5 _- A& K7 @& [4 Y6 h; z6 P& a. `
  24. #define IS_RNG_GET_IT(RNG_IT) (((RNG_IT) == RNG_IT_CEI) || ((RNG_IT) == RNG_IT_SEI)). {* K' U; S" b& D
复制代码
) k; ~2 h8 Q5 }+ C; Q
03. 相关函数
- C6 w, O6 g; E$ [. _) X
  1. /*  Function used to set the RNG configuration to the default reset state *****/
      K! m/ E4 J; X* U. b+ ?2 H
  2. void RNG_DeInit(void);
    / q% ~' m9 i1 |+ E5 `

  3. 1 ], L! z0 {: k( M3 r7 y. Z# H! A
  4. /* Configuration function *****************************************************/
    0 w: ]6 T3 z2 }1 q: u3 \' l
  5. void RNG_Cmd(FunctionalState NewState);
    6 C* `% ?5 z1 O/ T6 a
  6. ; i  Q6 t6 I9 J3 \$ y
  7. /* Get 32 bit Random number function ******************************************/* ?. A6 @  Q' k6 |" M4 P; r
  8. uint32_t RNG_GetRandomNumber(void);
    ( L. l+ U  c5 [

  9. 2 U& G- h& h6 u$ R0 a9 N6 t; Z- F
  10. /* Interrupts and flags management functions **********************************/  E3 r1 Q! e, I8 j/ V! p
  11. void RNG_ITConfig(FunctionalState NewState);$ F9 m( K$ b/ |
  12. FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG);1 W3 w# w( X. n- k4 a
  13. void RNG_ClearFlag(uint8_t RNG_FLAG);" k) Q- `- h& D2 N+ d& x* R. r5 [
  14. ITStatus RNG_GetITStatus(uint8_t RNG_IT);' ~* t1 x2 {: `! c. o. a
  15. void RNG_ClearITPendingBit(uint8_t RNG_IT);5 q# B/ ]# a/ x: F
复制代码
' Y% l* z4 y! {% i2 o
04. 结构体封装
2 m7 N# O3 i$ a, [3 P# Q
  1. /** ( N. m4 a) p( L( E
  2.   * @brief RNG
    & b4 b# E* a5 o5 V( ~+ E8 f
  3.   */7 h" v( e  z: x$ q$ T* ~  o3 A/ G$ e

  4. 6 I5 {2 w4 ~# \, ~* g
  5. typedef struct 4 J, ?; s7 c! @+ {; b' }
  6. {
    ; Y' z; a$ U4 T2 \( h/ a4 h+ m' `1 f
  7.   __IO uint32_t CR;  /*!< RNG control register, Address offset: 0x00 */
    ; K- Z0 l2 I, W. A, u; c0 \
  8.   __IO uint32_t SR;  /*!< RNG status register,  Address offset: 0x04 */( z' }! k' ?& }2 `* V0 u( C( ~  n
  9.   __IO uint32_t DR;  /*!< RNG data register,    Address offset: 0x08 */1 c' R$ m+ M! r0 B$ B, z% Y9 h
  10. } RNG_TypeDef;
复制代码

; K& ~  e( Y0 f6 A, |& s3 s9 W8 `" ^: P2 |* {- i; [
: Z* r1 F. h6 V3 e# ^
赞 收藏 评论0 发布时间:2022-3-30 12:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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