GD32L233 支持硬件随机数,超赞+1。
先来啰嗦的说一下随机数的概念,真随机数指通过物理现象来产生的随机数,比如噪声,核裂变等,伪随机数是通过软件算法可重复生成的随机数。
简单理解:
硬件随机数用起来比较简单,不过 GD32L233 跟 GD32F450 相比,还是有点不一样。
GD32L233随机数步骤
GD32F450随机数步骤
GD32L233 生成随机数需要使能 IRC48M 时钟:
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
。
硬件随机数
关于此,我确信已发现了一种美妙的算法,可惜快过年了,我不想多写,你们想看就自己看吧:真随机数和伪随机数
费马大定理