Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
8 years, 6 months ago.
STM32L4 Random rumber generator
Has somebody figured out how to use the RNG random number generator of the STM32L4 (Nucleo). I tried the following but it does not work. I found the functions in the HAL layer of the mbed source.
Regards Helmut
unsigned int TestRNG(void) { static RNG_HandleTypeDef rng_inst;
rng_inst.Instance = RNG;
if (HAL_RNG_Init(&rng_inst) != HAL_OK) return 0xffffffff;
uint32_t rnd = 0xff; if (HAL_RNG_GenerateRandomNumber(&rng_inst, &rnd) != HAL_OK) return 0xfffffffE;
HAL_RNG_DeInit(&rng_inst);
return rnd; }
1 Answer
8 years, 6 months ago.
You are missing at the beginning:
__HAL_RCC_RNG_CLK_ENABLE ();
Thanks for the advise, unfortunulaty this does not solve the problem, The call to HAL_RNG_GenerateRandomNumber returns HAL_RNG_STATE_TIMEOUT (0x03). I also tried HAL_RNG_GetRandomNumber which always returns 0.
posted by 02 May 2016This sequence looks ok, but there is one more important thing. RNG unit needs to work RNG_CLK. I'm afraid that in the library mbed this clock is not turned on.
I used (successfully) RNG in another STM32 by HAL functions as you use, but I do not have Nucleo L476 and I can not test how well I suspect the reasons for your problem.
Maybe try at the beginning:
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; /*Select PLLQ output as RNG clock source */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG; PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_PLL; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
( this is fragment of STM RNG demo for L476)
Using both HAL_RCC_RNG_CLK_ENABLE () and HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) worked for me. I get random bits at the rate of 31.37 million bits/second. The ref manual says you should get 32-bits every 40 ticks of RNG_CLK, so RNG_CLK appears to be 40MHz in this case. (on a crystal-clocked STM32L4, the RNG_CLK runs at 48mhz, and i get 37.2 million random bits/sec)
posted by 30 May 2016