登录/注册

stm32随机数生成

更多

在STM32微控制器中生成随机数可以通过硬件或软件两种方式实现,具体方法如下:


一、硬件随机数生成器(RNG,仅部分型号支持)

适用型号:STM32F2/F4/F7/H7等系列(需查看芯片手册确认是否集成RNG外设)

实现步骤:

  1. 启用RNG时钟
    在代码中开启RNG外设的时钟:

    __HAL_RCC_RNG_CLK_ENABLE();  // 使能RNG时钟
  2. 初始化RNG外设
    使用HAL库初始化:

    RNG_HandleTypeDef hrng;
    hrng.Instance = RNG;
    if (HAL_RNG_Init(&hrng) != HAL_OK) {
       Error_Handler();  // 初始化失败处理
    }
  3. 生成随机数
    调用库函数获取随机值:

    uint32_t random_value;
    HAL_RNG_GenerateRandomNumber(&hrng, &random_value);

注意事项:


二、软件生成伪随机数

适用场景:所有STM32型号(随机性较低,适合非安全场景)

1. 使用标准库 rand()

#include <stdlib.h>

// 设置随机种子(关键!可用ADC噪声或RTC时间作为种子)
srand(HAL_GetTick());  // 示例:用系统时间播种

// 生成随机数(范围:0~RAND_MAX)
int random_num = rand();

2. 通过ADC读取悬空引脚噪声

// 初始化ADC读取未连接的引脚(产生环境噪声)
HAL_ADC_Start(&hadc);
uint32_t seed = HAL_ADC_GetValue(&hadc);
srand(seed);  // 用ADC噪声作为种子

3. 基于定时器的不确定性

利用用户操作或中断的时间差生成种子:

uint32_t seed = TIM2->CNT;  // 获取定时器计数值
srand(seed);

三、注意事项

  1. 硬件RNG的优势:真随机数,适合加密、密钥生成等安全场景。
  2. 软件方法的缺点:伪随机数可预测,需确保种子随机性(如结合ADC、RTC、定时器)。
  3. 性能优化:硬件RNG生成速度更快(通常1个时钟周期内完成)。

示例代码(硬件RNG)

#include "stm32f4xx_hal.h"

RNG_HandleTypeDef hrng;

void RNG_Init() {
    __HAL_RCC_RNG_CLK_ENABLE();
    hrng.Instance = RNG;
    if (HAL_RNG_Init(&hrng) != HAL_OK) {
        // 处理初始化失败
    }
}

uint32_t Get_Random(void) {
    uint32_t random;
    if (HAL_RNG_GenerateRandomNumber(&hrng, &random) != HAL_OK) {
        // 处理错误
    }
    return random;
}

根据具体需求选择方法:安全敏感场景用硬件RNG,普通场景可用软件生成。建议查阅对应型号的《参考手册》确认外设支持。

如何在LTspice仿真中实现伪随机数和真随机数生成

本文讨论如何在LTspice仿真中利用flat()、gauss()和mc()函数来实现伪随机数和真随机数的生成,并介绍如何使用设置面板的Hack

2026-01-09 14:08:55

随机数和伪随机数的区别

随机数在当前程序运行环境中是一种常用参数,目前主要分为两种,伪随机数和真随机数,本期我们就来讲一下二者的区别。

2025-08-27 17:46:52

如何使用雪花算法生成真正的随机数

以前用rand和srand生成过伪随机数,伪随机数的序列是固定的,今天学习生成

2023-10-09 10:05:29

AN4230 STM32 MCU使用NIST随机数生成验证统计测试套件

AN4230 STM32 MCU使用NIST随机数生成验证统计测试套件

资料下载 佚名 2022-11-21 17:07:04

随机数生成器开源分享

电子发烧友网站提供《随机数生成器开源分享.zip》资料免费下载

资料下载 刘洋 2022-11-11 11:57:55

用于生成随机数的电子骰子

电子发烧友网站提供《用于生成随机数的电子骰子.zip》资料免费下载

资料下载 479809 2022-07-06 10:58:39

YIE002开发探索10-随机数生成

生成器1 随机数生成器构建2 YIE002-STM32的

资料下载 佚名 2022-01-17 13:06:59

单片机STM32F1随机数生成探索与实践(基于CUBEMX和KEIL5)

原理产生模拟噪声信号并采集,使用该硬件可以产生真随机数。但是低端单片机,如STM32F1,8051等没有随机数发生器,只能利用软件

资料下载 哈哈哈 2021-12-31 19:12:10

FPGA的伪随机数发生器学习介绍

的随机试验的结果,产生随机数有多种不同的方法。这些方法被称为随机数生成器

2023-09-12 09:13:32

如何在200 smart中生成随机数

上文写了博途中生成伪随机数的几种办法,现在试着使用其中简单的线性同余法实现在200 smart中完成类似功能。

2023-03-23 13:51:00

技术分享 | 随机数生成过慢导致系统阻塞怎么办?

/dev/random和/dev/urandom是linux上的随机数生成器,是个字符设备,为系统提供随机数。

2022-08-15 09:20:21

YIE002-STM32随机数生成器构建

font color=#ff5555 size=2>YIE002开发探索之随机数生成器1 随机数

2022-01-17 07:40:46

如何利用SystemVerilog仿真生成随机数

采用SystemVerilog进行仿真则更容易生成随机数,而且对随机数具有更强的可控性。对于

2021-10-30 10:33:05

什么是随机数

做开发的工程师们应该或多或少都接触过随机数,可能认为它就是一个随机生成的数字嘛,使用时也很简单,只要调用开发语言提供的函数即可。但实际上

2021-07-22 09:42:51

如何使用MSP430内部时钟生成随机数

■TI公司 MSP430微控制器产品部Lane Westlund不管是生成随机器件地址、强化加密算法还是创建独立产品密钥,可靠地生成

2019-07-12 06:20:19
7天热门专题 换一换
相关标签