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)