01. RNG概述
RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数。
RNG 已通过 FIPS PUB 140-2(2001 年 10 月 10 日)测试,成功率达 99%。
随机数发生器支持库函数stm32f4xx_rng.c 和对应的头文件 stm32f4xx_rng.h。
02. 相关类型
- /** @defgroup RNG_flags_definition
- * @{
- */
- #define RNG_FLAG_DRDY ((uint8_t)0x0001) /*!< Data ready */
- #define RNG_FLAG_CECS ((uint8_t)0x0002) /*!< Clock error current status */
- #define RNG_FLAG_SECS ((uint8_t)0x0004) /*!< Seed error current status */
- #define IS_RNG_GET_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_DRDY) || \
- ((RNG_FLAG) == RNG_FLAG_CECS) || \
- ((RNG_FLAG) == RNG_FLAG_SECS))
- #define IS_RNG_CLEAR_FLAG(RNG_FLAG) (((RNG_FLAG) == RNG_FLAG_CECS) || \
- ((RNG_FLAG) == RNG_FLAG_SECS))
- /**
- * @}
- */
- /** @defgroup RNG_interrupts_definition
- * @{
- */
- #define RNG_IT_CEI ((uint8_t)0x20) /*!< Clock error interrupt */
- #define RNG_IT_SEI ((uint8_t)0x40) /*!< Seed error interrupt */
- #define IS_RNG_IT(IT) ((((IT) & (uint8_t)0x9F) == 0x00) && ((IT) != 0x00))
- #define IS_RNG_GET_IT(RNG_IT) (((RNG_IT) == RNG_IT_CEI) || ((RNG_IT) == RNG_IT_SEI))
复制代码
03. 相关函数
- /* Function used to set the RNG configuration to the default reset state *****/
- void RNG_DeInit(void);
- /* Configuration function *****************************************************/
- void RNG_Cmd(FunctionalState NewState);
- /* Get 32 bit Random number function ******************************************/
- uint32_t RNG_GetRandomNumber(void);
- /* Interrupts and flags management functions **********************************/
- void RNG_ITConfig(FunctionalState NewState);
- FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG);
- void RNG_ClearFlag(uint8_t RNG_FLAG);
- ITStatus RNG_GetITStatus(uint8_t RNG_IT);
- void RNG_ClearITPendingBit(uint8_t RNG_IT);
复制代码
04. 结构体封装
- /**
- * @brief RNG
- */
- typedef struct
- {
- __IO uint32_t CR; /*!< RNG control register, Address offset: 0x00 */
- __IO uint32_t SR; /*!< RNG status register, Address offset: 0x04 */
- __IO uint32_t DR; /*!< RNG data register, Address offset: 0x08 */
- } RNG_TypeDef;
复制代码
|