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

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

[复制链接]
STMCU小助手 发布时间:2022-6-15 14:00
01. RNG概述
, w- b0 s+ A0 T- m4 c" b1 L5 Q( ~2 tRNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数。7 ^( g! }  Z* t& X/ p3 Z

- y! N. D9 |2 m  H+ FRNG 已通过 FIPS PUB 140-2(2001 年 10 月 10 日)测试,成功率达 99%。
/ @/ f& s/ G8 Q9 Q7 ~: V: ?* t5 K- A2 _
随机数发生器支持库函数stm32f4xx_rng.c 和对应的头文件 stm32f4xx_rng.h。
  n- V7 @/ ]" B% E3 O" o
( p4 Q3 g7 `) T02. 相关类型& Z6 S& \5 k: `3 p
  1. /** @defgroup RNG_flags_definition  
    ; |8 e  s/ g  H3 b) g  g
  2.   * @{
    6 Q# q- B, b% o+ ?9 y5 S, f
  3.   */   n) R7 H; w! @; B0 M. z2 c4 `! h+ _
  4. #define RNG_FLAG_DRDY               ((uint8_t)0x0001) /*!< Data ready */  X4 O; L! M3 J
  5. #define RNG_FLAG_CECS               ((uint8_t)0x0002) /*!< Clock error current status */
    - U4 ]+ R. V0 j
  6. #define RNG_FLAG_SECS               ((uint8_t)0x0004) /*!< Seed error current status */
    ; n' w# S1 G# H5 X. ^3 A! o
  7. 4 s/ J3 S/ |. e8 J9 B- t. t
  8. #define IS_RNG_GET_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_DRDY) || \
    3 G. \0 @& P0 X, P/ \8 X5 S: a" U
  9.                                    ((RNG_FLAG) == RNG_FLAG_CECS) || \
    % W6 ]! @. }5 f1 {1 q2 p3 T; |
  10.                                    ((RNG_FLAG) == RNG_FLAG_SECS))
    6 I) ^# @0 {9 O/ H$ M
  11. #define IS_RNG_CLEAR_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_CECS) || \
    ( g# k  j% _# g% Z- G1 X: {
  12.                                     ((RNG_FLAG) == RNG_FLAG_SECS))
    . Q/ d- A. G/ O3 L  {
  13. /**6 j4 B+ L/ U" n' }# @5 X+ ^
  14.   * @}5 S2 E+ R/ ~# X' P3 p( _" C# B
  15.   */ ) r# g# Z" f" H# ]  v( t
  16. 8 R# z/ ^+ J' x3 @
  17. /** @defgroup RNG_interrupts_definition   
    2 C4 n8 ~* Z$ `% o* ]3 L2 s
  18.   * @{0 |2 w0 x' _& Z+ D: s
  19.   */    m: z# ?6 R* c8 y1 ^, `7 h
  20. #define RNG_IT_CEI                  ((uint8_t)0x20) /*!< Clock error interrupt */+ t1 n& A9 p8 Z; y$ G  S) r, x
  21. #define RNG_IT_SEI                  ((uint8_t)0x40) /*!< Seed error interrupt */
    ) k% Z6 ~( G' E6 ^) ]/ G# S
  22. 3 X  ?+ [/ {* R3 T5 e) c+ P
  23. #define IS_RNG_IT(IT) ((((IT) & (uint8_t)0x9F) == 0x00) && ((IT) != 0x00))+ r. E6 j6 G. }3 q1 F
  24. #define IS_RNG_GET_IT(RNG_IT) (((RNG_IT) == RNG_IT_CEI) || ((RNG_IT) == RNG_IT_SEI))
复制代码

3 k1 d7 @) D/ m* C1 u03. 相关函数
1 R6 j4 ^8 k, S0 C; f
  1. /*  Function used to set the RNG configuration to the default reset state *****/
    # q2 p- ~* Z5 t! @* _4 g1 R2 U
  2. void RNG_DeInit(void);
      D0 f, g" a+ y1 ~) Z, X1 A
  3. . ]. v: s' R1 _/ k1 D3 a
  4. /* Configuration function *****************************************************/# {3 Z" Q* ~* g, A- [
  5. void RNG_Cmd(FunctionalState NewState);" ]! x; m, ~* [$ P! L

  6. 8 \3 S* p9 s6 x6 ^0 l, A
  7. /* Get 32 bit Random number function ******************************************/
    - J1 @8 J9 A# a/ q% N% ^# C/ ?
  8. uint32_t RNG_GetRandomNumber(void);5 k0 a7 m& F5 x9 k7 f' q; C
  9. ; C1 @4 d+ Y5 Q, X4 @5 I
  10. /* Interrupts and flags management functions **********************************/
    # S5 b3 ~% w0 o$ f; i8 E. S
  11. void RNG_ITConfig(FunctionalState NewState);" ~( A1 I4 G2 V, l
  12. FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG);! \+ F3 u, X- y. T/ i8 O
  13. void RNG_ClearFlag(uint8_t RNG_FLAG);
    + l, G, j, U7 _) S6 O' q0 {. f  U
  14. ITStatus RNG_GetITStatus(uint8_t RNG_IT);
    % x/ P3 \) I  j& D& i- q/ |
  15. void RNG_ClearITPendingBit(uint8_t RNG_IT);
复制代码
7 b6 b6 r; t0 `4 l- \( j6 b
04. 结构体封装
+ _( W, D' ]7 z. S4 R% n
  1. /** & \& p8 j6 B- o5 B& r. V( z
  2.   * @brief RNG, ]2 o1 A8 v5 O5 G# k" _3 t
  3.   */- v9 B/ S# v" v  [3 X
  4. 6 Z6 V" Z) _. [) W$ D- C  I2 [
  5. typedef struct
    & \. X' M3 T, Y. w4 ^, K
  6. {
    4 z+ Y/ F3 f% k1 M/ Q$ [
  7.   __IO uint32_t CR;  /*!< RNG control register, Address offset: 0x00 */
    8 F2 I. _' H+ E9 b0 r! U9 c
  8.   __IO uint32_t SR;  /*!< RNG status register,  Address offset: 0x04 */7 Y1 X" j' H* F/ @! |
  9.   __IO uint32_t DR;  /*!< RNG data register,    Address offset: 0x08 */# @6 L' a: V& ]1 k
  10. } RNG_TypeDef;
复制代码
' c/ b, J- A  k2 v" b1 F/ d

4 o6 ^+ r) k/ o2 X+ l( @5 U4 i% R% W+ X; G3 M- `. n0 Z" r. g
赞 收藏 评论0 发布时间:2022-6-15 14:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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