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、测试结果