STM32F4学习笔记12——RNG随机数发生器

发布者:CrystalClear最新更新时间:2021-12-08 来源: eefocus关键字:STM32F4  RNG  随机数发生器 手机看文章 扫描二维码
随时随地手机看文章

RNG主要特性

RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的 随机数。


RNG的主要特性

● 提供由模拟量发生器产生的 32 位随机数

● 两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期

● 通过监视 RNG 熵来标识异常行为(产生稳定值,或产生稳定的值序列)

● 可被禁止以降低功耗


RNG功能描述


随机数发生器采用模拟电路实现。此电路产生馈入线性反馈移位寄存器 (RNG_LFSR) 的种子, 用于生成 32 位随机数。


该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算以产生种子。RNG_LFSR 由 专用时钟 (PLL48CLK) 按恒定频率提供时钟信息,因此随机数质量与 HCLK 频率无关。当将 大量种子引入 RNG_LFSR 后,RNG_LFSR 的内容会传入数据寄存器 (RNG_DR)。

同时,系统会监视模拟种子和专用时钟 PLL48CLK。状态位(RNG_SR 寄存器中)指示何时 在种子上出现异常序列,或指示何时 PLL48CLK 时钟频率过低。检测到错误时生成中断。


操作

要运行 RNG,请按以下步骤操作:

1.如果需要,使能中断(为此,将 RNG_CR 寄存器中的 IE 位置 1)。准备好随机数时或 出现错误时生成中断。

2. 通过将 RNG_CR 寄存器中的 RNGEN 位置 1 使能随机数产生。这会激活模拟部分、RNG_LFSR 和错误检测器

3. 每次中断时,检查确认未出现错误(RNG_SR 寄存器中的 SEIS 和 CEIS 位应为 0), 并且随机数已准备就绪(RNG_SR 寄存器中的 DRDY 位为 1)。然后即可读取 RNG_DR 寄存器中的内容。


按照 FIPS PUB(联邦信息处理标准出版物)140-2 的要求,将 RNGEN 位置 1 后产生的第 一个随机数不应使用,但应保存起来,与产生的下一个随机数进行比较。随后产生的每个随机数都需要与产生的上一个随机数进行比较。如果任何一对进行比较的数字相等,则测试失败(连续随机数发生器测试)


错误管理

如果 CEIS 位的值为 1(时钟错误)

出现时钟错误时,RNG 无法再产生随机数,因为 PLL48CLK 时钟不正确。检查时钟控制器是 否正确配置,是否可提供 RNG 时钟,然后将 CEIS 位清零。当 CECS 位为 0 时,RNG 可正 常工作。时钟错误对产生的上一个随机数没有影响,因此 RNG_DR 寄存器内容可以使用。


如果 SEIS 位的值为 1(种子错误)

出现种子错误时,只要 SECS 位为 1,就会中断随机数产生。如果 RNG_DR 寄存器中有可 用随机数,不能使用该随机数,因为它可能没有足够的熵。


应执行以下操作:将 SEIS 位清零,然后将 RNGEN 位清零并置 1,以便重新初始化和重新 启动 RNG。


STM32F4的RNG库

如何使用RNG驱动

1.通过函数RCC_AHB2PeriphClockCmd(RCC_AHB2Perph_RNG,ENABLE)使能RNG控制器时钟。

2.通过函数RNG_Cmd()使能RNG。

3.等待直到随机数发生器产生有效的随机数(中断或查询模式)。

4.通过函数RNG_GetRandomNumber()得到随机数。

从上面第三步开始继续得到后面的随机数。


初始化和配置函数

这部分函数主要提供以下功能

· 初始化RNG外设

· 使能或禁止RNG外设。

void RNG_DeInit()功能:从新初始化RNG外设寄存器数据到复位值。

void RNG_Cmd(FunctionanState NewState)功能:使能或禁止RNG


得到32位随机数函数

uint32_t RNG_GetRandomNumber(void)

函数功能:返回32位随机数

调用此函数之前需要等待直到DRDY标志置位,调用函数RNG_GetFlagStatus(RNG_FLAG_DRDY)进行等待标志位。每次在的调用RNG_GetrandomNumber(void)后RNG_FLAG_DRDY标志自动清除。

在seed错误的情况下只要SECS位是1,随机数产生将被中断。如果RNG_DR寄存器中有数据可用,但是请不要使用,应为没有足够的entopy。这种情况下推荐用户通过函数RNG_ClearFlag(RNG_FLAG_SECS)清除SEIS标志,然后禁止并重新使能RNG外设(通过函数RNG_Cmd())来从新初始化和启动RNG。

在时钟错误的情况下,应为PLL48CLK时钟的不准确,RNG将无法产生随机数。检查是否正确配置时钟控制器RNG时钟,同时清除CEIS(通过函数RNG——ClearFlag(RNG_FLAG_CECS))位。当CECS位是0的时候RNG次啊能正常工作。时钟错误对先前残生的随机数没有影响,RNG_DR寄存器中的数据仍然可以使用。


中断标志管理

· 标志

RNG_FLAG_DRDY:RNG_DR寄存器有有效随机数时,通过读此寄存器来清除标志(可通过函数RNG_GetRandomNumber()实现)。

RNG_FLAG_CECS:seed检测错误

RNG_FLAG_SECS:时钟检测错误

· 中断

如果是能了RNG中断,下面三种情况僵尸的RNG中断会被挂起。

RNG_DR寄存器含有有效的随机数,只有通过读RNG_DR寄存器才能清除中断源,也就是清除中断挂起标志。

发生seed错误,检测到下面的错误序列之一:

64个以上的的连续位都是0或者1

32个以上出现连续的01.

通过函数RNG_ClearITPendingBit(RNG_IT_SEI)清除此中断源。

发生时钟错误,PLL48CLK不能被正确的检测到

关键字:STM32F4  RNG  随机数发生器 引用地址:STM32F4学习笔记12——RNG随机数发生器

上一篇:STM32F4学习笔记2——时钟与复位系统
下一篇:STM32F4学习笔记11——CRC循环冗余校验

推荐阅读最新更新时间:2024-11-09 10:43

基于STM32F4x9的LCD显示设计
   随着人机界面(GUI)在医疗、工业以及消费电子各应用领域需求的日益增长,高集成度、高性能的TFT液晶显示方案成为电子产品设计开发的重要组成部分。在无内置液晶控制器的情况下,单片机与具有内置控制器的液晶板之间往往采用串行或并行的总线接口连接,受限于连接总线的数据传输速度,难以支持较高的显示分辨率和画面质量。   意法半导体推出了基于ARM Cortex-M4内核的STM32F4x9微处理器,借助内置的LCD-TFT显示控制器和Chrom-ARM图形加速器,使SVGA高分辨率和高品质显示画面质量成为可能。本文围绕STM32F4x9微控制器完成了液晶显示的硬件设计,并介绍了基于这一硬件平台以及STemWin的软件应用开发。
[单片机]
基于<font color='red'>STM32F4</font>x9的LCD显示设计
STM32F407——电子评分器
#main.c #include sys.h #include delay.h #include usart.h #include led.h //#include beep.h //#include key.h #include exti.h extern u8 great,fine,bad,num; extern float Average,Percent; int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断分组 delay_init(168); //初始化延时函数 uar
[单片机]
<font color='red'>STM32F4</font>07——电子评分器
STM32F407板子上搭建TCP服务器及TFTP服务器
开发平台 STM32F407开发板(带以太网),板子上的PHY为LAN8720A,没有用到显示屏全为串口输出调试信息。实现功能 通过STM32CubeMX在原子STM32F407板子上搭建TCP Server 及 TFTP Server ,实现这些功能非常简单。步骤 功能介绍、工程搭建、工程代码、TFTP 服务器测试 1、TCP Server 实现显示连接上的客户端IP及对客户端发来的数据回传2、TFTP Server 实现IAP功能及读取MCU内部FLASH数据。这里用到的是文件传输协议,主要是参考官方文档UM1709,及官方STM324xG_EVAL的LWIP IAP例子。 工程搭建 外设配置 打开STM32CubeMX,点N
[单片机]
在<font color='red'>STM32F4</font>07板子上搭建TCP服务器及TFTP服务器
STM32F407——串口显示跑马灯状态
#main.c #include sys.h #include delay.h #include usart.h #include led.h //#include beep.h //#include key.h #include exti.h extern u8 onoff,dir,speed,change,flag; extern u16 time; int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断分组 delay_init(168); //初始化延时函数 LED_In
[单片机]
<font color='red'>STM32F4</font>07——串口显示跑马灯状态
毕业设计| STM32F407智能汽车
STM32小车功能介绍 小车的硬件部分使用了以STM32F407VET6最小开发板为核心板,内部结合:温湿度模块、烟雾浓度模块、RFID模块、GSM模块、GPS定位模块、语音识别模块、超声波模块、蓝牙模块、OLED模块、舵机模块、电机驱动模块、电机模块、蜂鸣器模块、电压数码管显示模块和电源模块,外结合四个麦克纳姆轮,构成一个完整可靠的硬件系统。 软件控制系统包括了智能显示系统、语音智能控制系统、无线控制系统、车灯智能控制系统、安全报警系统、智能避撞系统、智能温控系统和一键报警系统,在一定程度上提高汽车的安全性、控制性和防盗性。 Image 各个功能分解 语音智能控制系统: 通过语音识别模块识别驾驶员的语音来控
[单片机]
毕业设计| <font color='red'>STM32F4</font>07智能汽车
STM32f429 DAC的结构、功能及应用
13.1 介绍一下 数字量转换成模拟量的过程叫做数模转换,完成这种功能的电路叫做数模转换器。说白了就是将离散的数字信号转换为连续变量的模拟信号的一种器件。 这玩意主要由数字寄存器、模拟电子开关、位权网络、求和运算放大器和基准电压源(或恒流源)等组成的。主要用存于数字寄存器的数字量的各位数码,分别控制对应位的模拟电子开关,使数码为1的位在位权网络上产生与其位权成正比的电流值,再由运算放大器对各电流值求和,并转换成电压值 。 换成图也就是下面这个小东西: 13.2 STM32f429 DAC结构 STM32F429内部含有两个12 位电压输出数模转换器。DAC 可以按 8 位或 12 位模式进行配置,而且也是可以和DMA配
[单片机]
<font color='red'>STM32f4</font>29 DAC的结构、功能及应用
第15章 STM32F429的GPIO基础知识(重要)
15.1 初学者重要提示 学习本章节务必要认真学习并掌握15.3小节GPIO功能模式分析,学好它们,对后续章节中外设的学习大有裨益。 对于不使用的引脚,推荐设置为模拟模式,悬空即可。 GPIO的速度等级高的时候,最好使能IO补偿单元。 GPIO还涉及到一个注入电流的问题,此贴可以作为了解:http://www.armbbs.cn/forum.php?mod=viewthread&tid=87675 。 15.2 GPIO功能简介 STM32F429的GPIO特性如下: 输出状态:开漏/推挽 + 上拉/下拉电阻。 通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO设置为复用模式时)输出数据。 GPI
[单片机]
第15章 <font color='red'>STM32F4</font>29的GPIO基础知识(重要)
STM32F407开发板DS18B20应用案例
【1】DS18B20介绍 DS18B20是一种数字温度传感器,由Maxim Integrated公司生产。它采用单总线接口,能够在广泛的温度范围内测量温度,并通过数字方式输出温度值,具有较高的精度和稳定性。 以下是DS18B20温度传感器的主要特点和操作时序: (1)特点: 单总线接口:DS18B20使用单一的数据线进行通信,简化了连接和控制。 高精度测量:具有12位的温度分辨率,可测量范围为-55°C至+125°C。 数字输出:温度值以二进制形式传输,便于处理和解析。 内部存储:传感器可内部存储温度数据和配置信息。 低功耗:在非活动状态下,传感器可以进入睡眠模式以降低功耗消耗。 (2)操作时序: DS18B20的
[单片机]
<font color='red'>STM32F4</font>07开发板DS18B20应用案例
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved