STM32产生随机数

本文介绍了STM32微控制器如何生成随机数,包括使用C语言的stdlib.h库函数srand()和rand()进行软件生成,以及利用STM32F4内置的硬件随机数发生器RNG进行硬件生成。硬件方式通过RNG_GetRandomNumber()获取32位随机数,并提供了初始化和读取随机数的函数。示例代码展示了如何在主函数中获取指定范围内的随机数。
摘要由CSDN通过智能技术生成

STM32有2种方式产生随机数:硬件方式和软件方式

软件方式

其中软件方式可以通过C语言标准函数stdlib.hsrand()rand()来获取随机数,使用步骤为:

  1. 使用 srand(seed)来设置随机数种子。我们知道种子不改变的时候,产生多个随机数的时候,第一次产生的数字是随机的,后面产生的都与第一次相同。在单片机中,种子通常可以设置为定时器的一个计数值,也可以通过采集某个GPIO引脚悬空时的值作为随机数的种子
  2. 通过 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的随机数
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

[小G]

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值