微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32的ADC产生随机数

STM32的ADC产生随机数

时间:11-28 来源:互联网 点击:
因为在做一样东西需要产生随机数,范围在[0,15],在网上找到一种方法,就是利用ADC悬空引脚产生随机数,所以做了尝试,把尝试的结果分享一下,总的来说,随机效果还算可以。

函数如下:

首先初始化ADC1,然后读取通道4即PA4引脚上的电压值,转换成16位的数字值后取低4位,再赋给8位变量led_mode_value。

将这个led_mode_value变量通过串口送至电脑观察,效果如下:


看来随机效果还算可以,23次取值,取到了8个不同值,这样的随机程度可以接受。

随机数产生过程改进版:

函数如下:

初始化ADC1之后,先取一个低4位的值,然后再取一个16位随机值加到第一个随机4位值上,得到一个和,然后再取出这个和的低4位作为最终的范围在[0,15]中的随机数。

通过串口送到电脑,效果如下:

23次的取值统计,统计到了14个随机值,随机效果提升。

当然,利用ADC产生随机数是一个可行的方法,但由于是利用ADC引脚悬空的噪声电压,经AD转换来获取的,所以随机效果取决于当时处理器周围的电磁环境,电磁干扰越多,随机效果就越好,貌似这样有悖于降低EMI环境的理论,但有些事物总要作出取舍,世界的天平总是在晃动中保持平衡,没有极好,也没有极坏,适合的就是最好的。

PS:

STM32的ADC引脚对应的IO

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top