问答

汇集网友智慧,解决技术难题

21ic问答首页 - GD32F407系列

GD32F407系列

lengchenfu2022-06-21
GD32F407系列是否TRNG硬件随机数外设
回答 +关注 1
650人浏览 1人回答问题 分享 举报
1 个回答
  • 本帖最后由 tyw 于 2022-6-21 13:49 编辑

    STM32F407 - 随机数发生器


    STM32F4 自带了硬件随机数发生器(RNG),RNG处理器是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个32位的随机数。

    Center.jpg



    随机数发生器采用模拟电路实现。此电路产生馈入线性反馈移位寄存器(RNG_LFSR)的种子,用于生成32位随机数。


    该模拟电路由几个环形振荡器组成,振荡器的输出进行异或运算以产生种子。
    RNG_LFSR 由专用时钟(PLL48CLK)按恒定频率提供时钟信息,因此随机数质量与HCLK频率无关。
    当将大量种子引入 RNG_LFSR后,RNG_LFSR的内容会传入数据寄存器(RNG_DR)。


    同时,系统会监视模拟种子和专用时钟 PLL48CLK。状态位(RNG_SR寄存器中)指示何时在种子上出现异常序列,或指示何时PLL48CLK时钟频率过低。
    检测到错误时生成中断。


    寄存器
    -- RNG_CR(控制寄存器) --
    [3]IE:中断使能(检测到错误时生成的中断)
    [2]RNGEN:随机数发生器使能


    -- RNG_SR(状态寄存器) --
    [6]SEIS:种子错误中断状态
    [5]CEIS:时钟错误中断状态
    [2]SECS:种子错误当前状态
    [1]CECS:时钟错误当前状态
    [0]DRDY:数据就绪

    -- RNG_DR(数据寄存器) --
    [31~0]RNDATA:随机数据

    库函数配置(最简机能)
    目的:时钟使能,模块使能, 产生随机数,不做错误判定和处理。


    1)使能随机数发生器时钟。

    使用随机数发生器,必须先使能其时钟。随机数发生器时钟来自PLL48CK,通过AHB2ENR寄存器使能。
    这里通过调用 AHB2总线外设时钟的函数,使能 RNG时钟。

    RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_RNG, ENABLE);



    2)使能随机数发生器。
    通过 RNG_CR 寄存器的 RNGEN[2] 设置为 1 ,使能随机数发生器。


    3)判断DRDY位,读取随机数值。
    FlagStatus RNG_GetFlagStatus(uint8_t RNG_FLAG); //返回数据是否就绪

    uint32_t RNG_GetRandomNumber(void); //返回随机数




您需要登录后才可以回复 登录 | 注册