我刚刚更新了一个
电路板设计,将
STM32L433CC 替换为 STM32L4P5RE。我在 L433 上使用 RNG 没有问题。但是,对于 L4P5,在出现种子错误之前,我只能从 RNG 获得一个结果。
RNG:CR = 00800004,DR = 9a4c8249,SR = 00000001
...
RNG:CR = 00800004,DR = 00000000,SR = 00000044
我觉得奇怪的一件事是,如果 RNG 一次产生 128 位熵,我希望 RNG 能够从 DR 提供 4 个 32 位随机值。
两块板上的 RNG 时钟略有不同。两者均由 48MHz 的 PLLSAI1Q 提供时钟。PLL 由 433 上的 MSI 和新板上的 HSE (TXCO) 提供。AHB 在 L433 上的时钟频率为 80MHz,在 L4P5 上的时钟频率为 120MHz。
- PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLLSAI1;
- PeriphClkInit.RngClockSelection = RCC_RNGCLKSOURCE_PLLSAI1;
- PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_HSE;
我尝试将 RNG 时钟源更改为 HSI48 并遇到了同样的问题,
我只要求每秒 9600 比特的熵。
我已将 SysClock 路由出 MCO (/8) 并验证它是否正常。
我正在使用 STM32CubeIDE 生成项目,包括初始化代码。我没有更改调用 MX_RNG_Init() 后 HAL 配置的 RNG 配置。
应该注意的是,USB 工作得很好,而且时钟来自同一源。
我在两块不同的板上遇到了同样的问题,所以这似乎不是有缺陷设备的随机问题。
关于在哪里看有什么建议吗?