Random STM32 RNG时钟错误

Random STM32 RNG时钟错误,random,embedded,clock,stm32,Random,Embedded,Clock,Stm32,我是嵌入式developent的初学者,我正在使用主板STM32F417VGx 让RNG工作有困难 我试图通过直接将值写入寄存器和CMSIS外围库功能来实现这一点。 所以,我的代码: int main() { SystemInit(); /* Initialize clocks */ Init_GPIO(); /* Initialize LED's pins */ Init_RNG();


我是嵌入式developent的初学者,我正在使用主板STM32F417VGx

让RNG工作有困难
我试图通过直接将值写入寄存器和CMSIS外围库功能来实现这一点。

所以,我的代码:

int main() {
    SystemInit();              /* Initialize clocks */
    Init_GPIO();               /* Initialize LED's pins */
    Init_RNG();                /* Initialize RNG */

    RCC_ClocksTypeDef clocks;  
    RCC_GetClocksFreq(&clocks); /* Check clocks */
                                /* All clocks are 16 MHz (F42400) */

    while(1) {
        unsigned rdiode = randomRange(0, 3);
        toggleDiode(GPIOD, DIODES[rdiode]);
        soft_delay(1000000);
    }

}
InitRNG():

随机范围(uint,uint):

当(RNG_GetFlagStatus(RNG_FLAG_DRDY)=重置时,它将挂起
RNG_SR中的CEI为0x1,因此存在时钟错误

我在谷歌搜索了所有地方,在每个教程中,RNG都是开箱即用的,甚至没有人关心检查SEIS和CEIS标志(?u?)
所以我知道RNG需要至少48MHz的时钟,但我不知道它使用什么样的时钟源以及如何调整它的时钟:C

在stm32f4xx.h中,我有那些时钟值(在一个教程中推荐),但HSE是外部(非车载)时钟源,不是吗

#define HSE_VALUE    ((uint32_t)8000000)
你的代码看起来不错

RNG由AHB2计时。该时钟由SYSCLK除以AHB预分频器(RCC_CFGR中的HPRE)得出。它也被称为HCLK。但正如参考手册所说:

RNG_LFSR由专用时钟(RNG_CLK)以恒定频率计时 频率,因此随机数的质量与HCLK频率无关

检查RNG_SR的值。如果设置了SEI、CEI、SECS、CECS标志中的任何一个,您将陷入无休止的循环。检查MCU的时钟是否正确。您使用外部时钟(HSE)还是内部时钟(HSI)

uint32_t randomRange(uint32_t low, uint32_t int high){
    while(RNG_GetFlagStatus(RNG_FLAG_DRDY) == RESET);
    return RNG_GetRandomNumber() % (high-low) + low;
}
#define HSE_VALUE    ((uint32_t)8000000)