概述
STM32有2种方式产生随机数:硬件方式和软件方式
软件方式
其中软件方式可以通过C语言标准函数stdlib.h
的srand()
和rand()
来获取随机数,使用步骤为:
- 使用
srand(seed)
来设置随机数种子。我们知道种子不改变的时候,产生多个随机数的时候,第一次产生的数字是随机的,后面产生的都与第一次相同。在单片机中,种子通常可以设置为定时器的一个计数值,也可以通过采集某个GPIO引脚悬空时的值作为随机数的种子 - 通过
rand()
函数获取一个随机数
硬件方式
STM32F4 自带了硬件随机数发生器(RNG),RNG 处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 【32 位】的随机数
(即随机数的范围是0~2^32-1)
随机数获取的方式:
#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); //使数据位于某个范围
}
在主函数中获取一个随机数:
int x = RNG_Get_RandnomRange(100, 300) // 获取100~300的随机数
最后
以上就是机智心情为你收集整理的STM32产生随机数的全部内容,希望文章能够帮你解决STM32产生随机数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复