【野火秉火STM32 F429开发板试用体验】+串口+真随机数发生器

本帖最后由 奔跑的黑蚂蚁 于 2018-7-9 10:58 编辑 本次所要发布的是野火挑战者STM32F429开发板的串口和STM32F429单片机内部的真随机数模块的使用过程,以及F429内部的随机数发生器与C标准库中的随机函数rand()的对比。 首先介绍一下F429内部的“真随机数发生器”的工作原理,F429内部的随机数发生器以它内部的一个模拟噪声作为种子数,然后将这个种子输送给硬件随机数发生电路,硬件随机数发生电路根据本次接收到的“种子”进行输出最终的随机数。每一次的随机数都是由“新的”种子进行生成,所以说重复率是极低的。下图是官方手册的简介: F429内部的随机数模块使用起来也是很方便的,但是有一个前提条件,必须将芯片的时钟频率从默认的180MHz降低为168MHz,这是因为芯片设计的时候就设计成,如果要使用随机数模块和USB模块的话,其工作频率分频后必须是48MHz。但是芯片主频率在180MHz的情况下无法给随机数模块和USB模块提供48MHz的频率,所以必须降频至168MHz。设置完频率后,我们可以直接使用官方固件库的函数进行激活随机数模块,程序如下: 获取随机数的程序如下: 下面是F429的串口配置部分:上图中的黄色框框中的步骤不可缺少串口发送一个字节的子函数重定义printf函数至串口上图是主程序,其中z是用于测试和打印的随机数,在主函数中调用了srand()和rand()函数,用于和F429内部的随机数输出对比,以下是串口打印输出对比:使用F429内部的随机数发生器产生的随机数,图中两个窗口是芯片下载程序后重新上电两次的数据结果使用srand()和rand()产生的随机数,图中两个窗口是芯片下载程序后重新上电两次的数据结果结果:使用srand()和rand()函数输出随机数的时候,在种子相同的情况下,每次输出的随机数的顺序是相同的,是个伪随机数。但是STM32F429的随机数模块每次上电后输出的随机数都不重复,且数据顺序不一。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
奔跑的黑蚂蚁 2018-07-09
程序的注释中有错别字,见谅啊。发表后才看到的。
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子