STM32G474之随机数发生器

2024-09-04 11:36

本文主要是介绍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、测试结果

这篇关于STM32G474之随机数发生器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1135911

相关文章

明明的随机数处理问题分析与解决方案

明明的随机数处理问题分析与解决方案 引言问题描述解决方案数据结构设计具体步骤伪代码C语言实现详细解释读取输入去重操作排序操作输出结果复杂度分析 引言 明明生成了N个1到500之间的随机整数,我们需要对这些整数进行处理,删去重复的数字,然后进行排序并输出结果。本文将详细讲解如何通过算法、数据结构以及C语言来解决这个问题。我们将会使用数组和哈希表来实现去重操作,再利用排序算法对结果

STM32G474窗口看门狗中断

STM32G474窗口看门狗中断用来演示最后一次喂狗。注意:即使窗口看门狗被禁止,窗口看门狗的"递减计数器"也会继续递减计数。 1、窗口看门狗复位的条件 1)、将"控制寄存器WWDG_CR"中的WDGA=1,激活"窗口看门狗计数器等于0x3F"时,则产生复位 2)、装载"窗口看门狗的计数器值"大于"窗口看门狗window寄存器的值",则产生复位。 3)、窗口看门狗的"提前唤醒中断EWI=1",且

Java生成随机数工具类,进制之间的转换工具类,获取指定时间,时间格式转换工具类

废话不多说,贡献一下code 1.编号生成工具 import org.apache.commons.lang3.StringUtils;import java.math.BigInteger;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Random;/*** 编号生成工具*/@

STM32G474之使用DAC1和DAC2测试模拟比较器

STM32G474使用DAC1和DAC2的输出作为比较器输入,测试模拟比较器,方法如下: PA1的附加功能为COMP1_INP,无需映射,直接将它配置为模拟功能,就可以使用了。 将COMP1_OUT引脚映射到PA0; 采用DAC2_OUT1输出电压给COMP1_INP引脚,因此在测试时,需要将PA6和PA1短接。 采用DAC1_OUT1输出在内部连接到“比较器反向输入端”; 当DAC2_OUT1输

Cocos2dx 3.0 过渡篇(五) 随机数的获取

1、简单的随机数用法:CCRANDOM_0_1 示例如下: [cpp] int HelloWorld::getRand(int start,int end)  {   float i = CCRANDOM_0_1()*(end-start+1)+start;  //产生一个从start到end间的随机数   return (int)i;  }   2、上述的方法虽然简便,但是运行

(php伪随机数生成)[GWCTF 2019]枯燥的抽奖

审核源码发现加载check.php,审计发现使用了mt_rand()函数,这个函数生成的值是伪随机的 参考下面这篇文章 PHP mt_rand安全杂谈及应用场景详解 - FreeBuf网络安全行业门户 kali里面输入下载工具 git clone https://github.com/openwall/php_mt_seed.git cd进去输入make后编译出的文件先

STM32G474之DAC

STM32G474分别使用CORDIC硬件和“math.h”的正弦值,从DAC1和DAC2输出。 1、DAC特点  PA4的附加功能为DAC1_OUT1,无需映射,直接将它配置为模拟功能,就可以使用了。 PA6的附加功能为DAC2_OUT1,无需映射,直接将它配置为模拟功能,就可以使用了。 2、测试程序 DAC_HandleTypeDef      DAC_1_Handler;   //DA

取Random范围内的随机数

Random rand = new Random();        int m = rand.nextInt(); //int范围类的随机数        int n = rand.nextInt(100); //0-100范围内的随机数      包含0,不包含100.

linux 随机数生成原理

简介 在信息学中,信息熵是用来描述系统混乱无序程度的物理量;系统的熵越大,系统就越无序,所含有用信息量越少,不确定度越大。 Linux内核中有一个熵池设备,专门收集来自系统环境的一些噪音,来产生高质量随机数序列;这些噪声主要来自于硬件设备发生中断的时间,用户点击鼠标的时间间隔,硬件噪声,磁盘活动等 /dev/random与/dev/urandom 这两个字符设备文件都是利用Linux内

SQL循环生成随机数

DECLARE @i INTDECLARE @dian DECIMAL(7,2)SET @i = 1WHILE @i < 40BEGINSET @dian = rand()*1000INSERT INTO tbl_energy_electricity_hour_201701([value])VALUES(CAST(@dian AS DECIMAL(7,2)))SET @i = @i + 1end