How to generate truly random numbers on STM32F401CCU6 in Arduino IDE?

Post here first, or if you can't find a relevant section!
Post Reply
_Northstrix_
Posts: 13
Joined: Sun Sep 03, 2023 4:11 am

How to generate truly random numbers on STM32F401CCU6 in Arduino IDE?

Post by _Northstrix_ »

Hello, Everyone.
I'm working on a project that requires the STM32F401CCU6 to generate truly random numbers.
Is there a way to do it in the Arduino IDE? And if there is, please give me a code that does it.
I tried to use the code from the STM32F407VET6 for that purpose, but it won't even compile.
GonzoG
Posts: 403
Joined: Wed Jan 15, 2020 11:30 am
Answers: 26
Location: Prudnik, Poland

Re: How to generate truly random numbers on STM32F401CCU6 in Arduino IDE?

Post by GonzoG »

Probably the same as for F407:
viewtopic.php?p=12993#p12993
_Northstrix_
Posts: 13
Joined: Sun Sep 03, 2023 4:11 am

Re: How to generate truly random numbers on STM32F401CCU6 in Arduino IDE?

Post by _Northstrix_ »

I've tried that.

And I got the following error:

Arduino: 1.8.19 (Windows 10), Board: "Generic STM32F4 series, Generic F401CC, STM32CubeProgrammer (DFU), Enabled (generic 'Serial'), CDC (generic 'Serial' supersede U(S)ART), Low/Full Speed, Smallest (-Os default), Newlib Nano (default)"





















STM32F407VET6_RNG:26:1: error: 'RNG_HandleTypeDef' does not name a type; did you mean 'RTC_HandleTypeDef'?

26 | RNG_HandleTypeDef hrng;

| ^~~~~~~~~~~~~~~~~

| RTC_HandleTypeDef

STM32F407VET6_RNG:34:34: error: variable or field 'HAL_RNG_MspInit' declared void

34 | extern "C" void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng) {

| ^~~~~~~~~~~~~~~~~

STM32F407VET6_RNG:34:34: error: 'RNG_HandleTypeDef' was not declared in this scope; did you mean 'RTC_HandleTypeDef'?

34 | extern "C" void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng) {

| ^~~~~~~~~~~~~~~~~

| RTC_HandleTypeDef

STM32F407VET6_RNG:34:53: error: 'hrng' was not declared in this scope

34 | extern "C" void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng) {

| ^~~~

STM32F407VET6_RNG:45:36: error: variable or field 'HAL_RNG_MspDeInit' declared void

45 | extern "C" void HAL_RNG_MspDeInit(RNG_HandleTypeDef* hrng) {

| ^~~~~~~~~~~~~~~~~

STM32F407VET6_RNG:45:36: error: 'RNG_HandleTypeDef' was not declared in this scope; did you mean 'RTC_HandleTypeDef'?

45 | extern "C" void HAL_RNG_MspDeInit(RNG_HandleTypeDef* hrng) {

| ^~~~~~~~~~~~~~~~~

| RTC_HandleTypeDef

STM32F407VET6_RNG:45:55: error: 'hrng' was not declared in this scope

45 | extern "C" void HAL_RNG_MspDeInit(RNG_HandleTypeDef* hrng) {

| ^~~~

STM32F407VET6_RNG:34:33: error: variable or field 'HAL_RNG_MspInit' declared void

34 | extern "C" void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng) {

| ^~~~~~~~~~~~~~~~~

STM32F407VET6_RNG:34:33: error: 'RNG_HandleTypeDef' was not declared in this scope; did you mean 'RTC_HandleTypeDef'?

34 | extern "C" void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng) {

| ^~~~~~~~~~~~~~~~~

| RTC_HandleTypeDef

STM32F407VET6_RNG:34:52: error: 'hrng' was not declared in this scope

34 | extern "C" void HAL_RNG_MspInit(RNG_HandleTypeDef* hrng) {

| ^~~~

STM32F407VET6_RNG:45:35: error: variable or field 'HAL_RNG_MspDeInit' declared void

45 | extern "C" void HAL_RNG_MspDeInit(RNG_HandleTypeDef* hrng) {

| ^~~~~~~~~~~~~~~~~

STM32F407VET6_RNG:45:35: error: 'RNG_HandleTypeDef' was not declared in this scope; did you mean 'RTC_HandleTypeDef'?

45 | extern "C" void HAL_RNG_MspDeInit(RNG_HandleTypeDef* hrng) {

| ^~~~~~~~~~~~~~~~~

| RTC_HandleTypeDef

STM32F407VET6_RNG:45:54: error: 'hrng' was not declared in this scope

45 | extern "C" void HAL_RNG_MspDeInit(RNG_HandleTypeDef* hrng) {

| ^~~~

C:\STM32F407VET6_RNG\STM32F407VET6_RNG.ino: In function 'void setup()':

STM32F407VET6_RNG:60:3: error: 'hrng' was not declared in this scope

60 | hrng.Instance = RNG;

| ^~~~

STM32F407VET6_RNG:60:19: error: 'RNG' was not declared in this scope

60 | hrng.Instance = RNG;

| ^~~

STM32F407VET6_RNG:61:7: error: 'HAL_RNG_Init' was not declared in this scope; did you mean 'HAL_RTC_Init'?

61 | if (HAL_RNG_Init(&hrng) != HAL_OK) {

| ^~~~~~~~~~~~

| HAL_RTC_Init

C:\STM32F407VET6_RNG\STM32F407VET6_RNG.ino: In function 'void loop()':

STM32F407VET6_RNG:68:37: error: 'hrng' was not declared in this scope

68 | if (HAL_RNG_GenerateRandomNumber(&hrng, &aRandom32bit) != HAL_OK) {

| ^~~~

STM32F407VET6_RNG:68:7: error: 'HAL_RNG_GenerateRandomNumber' was not declared in this scope

68 | if (HAL_RNG_GenerateRandomNumber(&hrng, &aRandom32bit) != HAL_OK) {

| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

exit status 1

'RNG_HandleTypeDef' does not name a type; did you mean 'RTC_HandleTypeDef'?



This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
ag123
Posts: 1653
Joined: Thu Dec 19, 2019 5:30 am
Answers: 24

Re: How to generate truly random numbers on STM32F401CCU6 in Arduino IDE?

Post by ag123 »

rm0368 stm32f401 reference manual
https://www.st.com/resource/en/referenc ... ronics.pdf

stm32f401 apparently don't have hardware RNG and crypto
hence, your options are PRNG
https://en.wikipedia.org/wiki/List_of_r ... rs_(PRNGs)
f4xx has an FPU hence, you can even use those PRNG that is based on floating point values

to seed that, you can try things like to run the RTC and seed that with RTC time each time the user manually resets.
Or place a wire like at least 10s of cm long and read the analog pin, it may pick up random radio waves and perhaps you can use a random radio wave value to seed the PRNG
_Northstrix_
Posts: 13
Joined: Sun Sep 03, 2023 4:11 am

Re: How to generate truly random numbers on STM32F401CCU6 in Arduino IDE?

Post by _Northstrix_ »

Got it. Thank you.
Post Reply

Return to “General discussion”