前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >M-Arch(番外6)GD32L233评测-随机数(附 软件随机数生成算法)

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

作者头像
滚神大人
发布2022-03-22 12:07:21
3330
发布2022-03-22 12:07:21
举报
文章被收录于专栏:趣Python趣Python

前言

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

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

简单理解:

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

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

GD32L233随机数步骤

GD32F450随机数步骤

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

IRC48M时钟

代码

GDL233 的初始化代码:

代码语言:javascript
复制
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 的初始化代码:

代码语言:javascript
复制
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

硬件随机数

软件随机数

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

费马大定理

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 趣Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 代码
  • 测试结果
  • 软件随机数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档