STM32G474之随机数发生器

STM32G474一个RNG设备,它能提供由“集成模拟电路”生成的32位随机数,是硬件随机数发生器。在C语言中,若包含头文件“stdlib.h”,我们就可以使用有rand()函数,它是C语言中用于生成随机数的函数。

1、“随机数”的应用

1)、一般用“随机数”作为延时函数的传递参数,来获取不同的延时时间。在多主机通讯系统中,要求时间同步采集数据,但是数据传输,若发生在同一时刻,通讯就会发生碰撞,甚至导致通讯瘫痪。如果我们在同一时刻延时后在发送,由于每个设备的延时时间不同,发送数据碰撞的几率就会大大降低。

2)、用来生成验证码

3)、生成随机密码,供用户选择。

了解它的用处,才会在应用中使用它。

2、测试程序

void Random_Number_Generator_Init(void);
int32_t Read_Hardware_Random_Number_Generator(void);
void Read_Software_Random_Number_Generator(void);

//需要在SystemClock_Config()函数中初始化“Random Number Generator”外设时钟
//否则RNG外设不工作,导致随机数始终为0

void Random_Number_Generator_Init(void)
{
  __HAL_RCC_RNG_CLK_ENABLE();                             //开启“硬件随机数发生器”时钟
    RNG_HandleTypeDef Rang_Structure;                       //定义随机数相关结构体

    Rang_Structure.Instance=RNG;                            //选择随机数单元
    Rang_Structure.Init.ClockErrorDetection=RNG_CED_ENABLE; //使能“硬件随机数发生器”
    
    HAL_RNG_Init(&Rang_Structure);                          //初始化“硬件随机数发生器”
}

//函数功能:使用“硬件随机数发生器”获取随机数
int32_t Read_Hardware_Random_Number_Generator(void)
{
    int32_t Hardware_RNG;

    Hardware_RNG=RNG->DR;//使用“硬件随机数发生器”获取随机数

  printf("Hardware_RNG=0x%X\r\n",Hardware_RNG);
    return(Hardware_RNG);
}

//函数功能:使用“软件随机数发生器”获取随机数
void Read_Software_Random_Number_Generator(void)
{
    int32_t Software_RNG;

    Software_RNG=rand();
    //使用软件获取随机数,需要包含头文件“stdlib.h”
    //rand()是C语言中用于生成随机数的函数。

  printf("Software_RNG=0x%X\r\n",Software_RNG);
}

3、测试结果

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值