STM32有2种方式产生随机数:硬件方式和软件方式
软件方式
其中软件方式可以通过C语言标准函数stdlib.h
的srand()
和rand()
来获取随机数,使用步骤为:
- 使用
srand(seed)
来设置随机数种子。我们知道种子不改变的时候,产生多个随机数的时候,第一次产生的数字是随机的,后面产生的都与第一次相同。在单片机中,种子通常可以设置为定时器的一个计数值,也可以通过采集某个GPIO引脚悬空时的值作为随机数的种子 - 通过
rand()
函数获取一个随机数
硬件方式
STM32F4 自带了硬件随机数发生器(RNG),RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 【32 位】的随机数
(即随机数的范围是0~2^32-1)
随机数获取的方式:文章来源:https://www.toymoban.com/news/detail-657761.html
#include "rng.h"
#include "delay.h"
#include "sys.h"
//返回0 初始化成功,返回1初始化失败
u8 RNG_Init(void)
{
u16 i;
delay_init(168);
//使能RNG时钟
RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG,ENABLE); //使能RNG时钟,在AHB2总线上
//使能RNG
RNG_Cmd(ENABLE);//使能RNG
while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==0){ //等待DRDY稳定,稳定之后不为0,返回1
i++;
delay_us(100);
if(i >= 10000){
return 1; //超时强制返回
}
}
return 0;
}
//读取数值函数
u32 RNG_Get_RandomNum(void)
{
while(RNG_GetFlagStatus(RNG_FLAG_DRDY)==0); //等待稳定
return RNG_GetRandomNumber(); //获取并返回数值
}
//获取指定范围[min, max]的随机数
int RNG_Get_RandnomRange(int min, int max)
{
return min + RNG_Get_RandomNum()%(max-min+1); //使数据位于某个范围
}
在主函数中获取一个随机数:文章来源地址https://www.toymoban.com/news/detail-657761.html
int x = RNG_Get_RandnomRange(100, 300) // 获取100~300的随机数
到了这里,关于STM32产生随机数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!