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

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

[复制链接]
STMCU小助手 发布时间:2022-3-30 12:00
01. RNG概述
& y2 x; j' V8 i2 g6 Q, q/ \RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数。6 p) B% O9 F0 c  N" O. d
- w7 J; h) k" D5 c8 ~, [4 l+ e5 B
RNG 已通过 FIPS PUB 140-2(2001 年 10 月 10 日)测试,成功率达 99%。
) C8 C7 e# t6 J* A# }* w% F( s' n6 R/ g4 M& u6 c' H
随机数发生器支持库函数stm32f4xx_rng.c 和对应的头文件 stm32f4xx_rng.h。
0 r% V  |# q9 X: {. U( S+ m0 z* y4 p# |. Y( N2 r0 y* E% V
02. 相关类型
. U8 X7 A/ s$ V- M
  1. /** @defgroup RNG_flags_definition  & t; R/ Y. E6 O& B- u
  2.   * @{5 \* K; z- V' F* q5 U. @
  3.   */
    ! |  c# L: T0 p0 a. y) F
  4. #define RNG_FLAG_DRDY               ((uint8_t)0x0001) /*!< Data ready */
    # k: I8 }7 N1 c/ O# w
  5. #define RNG_FLAG_CECS               ((uint8_t)0x0002) /*!< Clock error current status */7 W4 M+ S1 M/ j2 {8 ~
  6. #define RNG_FLAG_SECS               ((uint8_t)0x0004) /*!< Seed error current status */
    6 U. s* s0 |9 m; F  o" T
  7. # Y+ q. I5 b! n: t7 C2 b# F! J+ l% F
  8. #define IS_RNG_GET_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_DRDY) || \$ R3 \5 A8 l% r+ @' ?
  9.                                    ((RNG_FLAG) == RNG_FLAG_CECS) || \
    ; L7 P) g( d# N
  10.                                    ((RNG_FLAG) == RNG_FLAG_SECS))1 H* j. t4 o; x3 [
  11. #define IS_RNG_CLEAR_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_CECS) || \
    - o) ~, o& X" J  [- u, ?
  12.                                     ((RNG_FLAG) == RNG_FLAG_SECS))
    6 ]  @/ l, d; ?# n8 u* G) U
  13. /**
    3 a9 h5 f( P8 b& J6 b
  14.   * @}7 p- f% w9 B& z" C$ ^5 Q
  15.   */
    + ]1 j! u( [5 a" O+ n* M
  16. " O' x: |) y' ]( d& {
  17. /** @defgroup RNG_interrupts_definition   
    # H7 i$ [' W' _/ v4 H. x
  18.   * @{+ g4 V: W9 q! r
  19.   */  4 E$ S1 ~" F0 x' X( i% I+ f
  20. #define RNG_IT_CEI                  ((uint8_t)0x20) /*!< Clock error interrupt *// b  X: _6 P4 Q9 l
  21. #define RNG_IT_SEI                  ((uint8_t)0x40) /*!< Seed error interrupt */
    6 c5 K; g+ M  h* H6 \7 W2 z: d

  22. 2 _9 `/ g1 E7 L
  23. #define IS_RNG_IT(IT) ((((IT) & (uint8_t)0x9F) == 0x00) && ((IT) != 0x00))
    + c+ j- q1 W, l3 z0 D) q8 Q
  24. #define IS_RNG_GET_IT(RNG_IT) (((RNG_IT) == RNG_IT_CEI) || ((RNG_IT) == RNG_IT_SEI))! \# [2 I: V, t, O3 V/ _
复制代码
8 D" j  U/ z# V6 S( z- e
03. 相关函数
/ J, d& P5 r- M* ]$ ~3 h8 q
  1. /*  Function used to set the RNG configuration to the default reset state *****/
    . B9 G/ a5 j5 N+ ]
  2. void RNG_DeInit(void);
    & a2 l; R! u6 F/ A8 B8 @+ |
  3. 4 i1 c$ m* {. z* n9 Z7 N* u" {
  4. /* Configuration function *****************************************************/
    % C( y3 K/ l! V% {6 q3 s
  5. void RNG_Cmd(FunctionalState NewState);
    8 v4 q3 r) i1 B9 |" ~* B/ m9 w; r
  6. # x9 S' K( C, ~9 P
  7. /* Get 32 bit Random number function ******************************************/
    - Z6 A9 K0 a3 h7 i0 G
  8. uint32_t RNG_GetRandomNumber(void);4 Z. u2 Q$ O2 w% V
  9. 8 R. f, ~/ Q% e$ }3 `
  10. /* Interrupts and flags management functions **********************************/
    ( n6 j; k7 c. n
  11. void RNG_ITConfig(FunctionalState NewState);! t! n& g' I0 m! Q2 y( D- a3 a5 R+ Z
  12. FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG);
    8 e$ h0 Z7 ?* e  c/ J$ G& j
  13. void RNG_ClearFlag(uint8_t RNG_FLAG);( B4 s0 L  o7 ~+ G+ M/ I; H+ j
  14. ITStatus RNG_GetITStatus(uint8_t RNG_IT);
    / _1 m  i+ ?/ j  V9 p
  15. void RNG_ClearITPendingBit(uint8_t RNG_IT);+ f! i; I3 N1 v# L, `1 g
复制代码
; q/ r& _% B' w! a6 O1 \" G8 b
04. 结构体封装* p2 G/ ]4 m% [* q
  1. /** . u" l" h; A( f& E) e1 b4 c
  2.   * @brief RNG
    1 s9 v) w! e& u5 |) M/ F0 o
  3.   */
    0 `. B) S* u1 _4 C9 s
  4. 7 V/ s' O+ J- H& L& g9 a# P
  5. typedef struct 3 U' X+ v0 E  h' N: U( q) A
  6. {3 A% c' @, d8 `+ h" j/ G
  7.   __IO uint32_t CR;  /*!< RNG control register, Address offset: 0x00 */
    6 s( ]9 G* D3 M0 e
  8.   __IO uint32_t SR;  /*!< RNG status register,  Address offset: 0x04 */5 F2 z2 j: Q0 N3 X
  9.   __IO uint32_t DR;  /*!< RNG data register,    Address offset: 0x08 */" ]' X( |" r% d; `) s% y2 `
  10. } RNG_TypeDef;
复制代码

" M% m8 @+ n) D7 o7 G3 C& h5 H+ n4 V$ \. E! j" c/ d' O
  k* I$ \9 b% \$ e2 H$ m2 Q0 i7 M
收藏 评论0 发布时间:2022-3-30 12:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版