M-Arch(番外6)GD32L233评测-随机数(附 软件随机数生成算法)

本文探讨了GD32L233和GD32F450微控制器在硬件随机数生成上的差异。GD32L233在启用IRC48M时钟后才能进行随机数生成,而GD32F450则不需要。初始化代码中展示了两个设备的不同步骤。通过1秒间隔调用trng_get_true_random_data,验证了硬件随机数的使用。文章还简要提到了真随机数与伪随机数的区别,并暗示了一个潜在的高效随机数算法,但未详细展开。
摘要由CSDN通过智能技术生成

前言

GD32L233 支持硬件随机数,超赞+1。

先来啰嗦的说一下随机数的概念,真随机数指通过物理现象来产生的随机数,比如噪声,核裂变等,伪随机数是通过软件算法可重复生成的随机数。

简单理解:

  • 输入固定时,真随机数的输出不一样,伪随机数是一样的。

  • 伪随机数的随机来源于输入的随机,当输入的样本足够大并且变化无"特定"规律时,输出看起来就是随机的。

硬件随机数用起来比较简单,不过 GD32L233 跟 GD32F450 相比,还是有点不一样。

1f8b6b2a79d0f049eef14691501e94f3.png
GD32L233随机数步骤
6538499b80836341dd7179c3a3b8632b.png
GD32F450随机数步骤

GD32L233 生成随机数需要使能 IRC48M 时钟:

55efb7e0c8ab490f482e8fcd4637185c.png
IRC48M时钟

代码

GDL233 的初始化代码:

void rnd_init(void)
{
#ifdef SUPPORT_HARD_RNG
    rcu_osci_on(RCU_IRC48M);
    while(ERROR == rcu_osci_stab_wait(RCU_IRC48M));

    rcu_periph_clock_enable(RCU_TRNG);
    trng_deinit();
    trng_enable();

    while (trng_flag_get(TRNG_FLAG_DRDY) == RESET);
    get_rand_data();
#endif
}

GDF450 的初始化代码:

void rnd_init(void)
{
#ifdef SUPPORT_HARD_RNG
    rcu_periph_clock_enable(RCU_TRNG);
    trng_deinit();
    trng_enable();

    while (trng_flag_get(TRNG_FLAG_DRDY) == RESET);
    get_rand_data();
#endif
}

测试结果

1 秒打印一次,调用trng_get_true_random_data

241242803ec0e548a7d1f903dda95d46.gif
硬件随机数

软件随机数

关于此,我确信已发现了一种美妙的算法,可惜快过年了,我不想多写,你们想看就自己看吧:真随机数和伪随机数

24b9d6408595629a299d4aa938076e3f.png
费马大定理
3f5d81e825d9b25c0932f1aa5b960f47.gif 364ddb332b23126be09bf164637399bd.png 788e91f5b109e1b39f990634accec0ea.gif

小编:我把图换了哦。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值