Closed fivdi closed 3 years ago
Hi @fivdi,
First of all thank you for this detailed analysis and the solution suggested. We do appreciate.
From our side, we tried to reproduce the issue you described but could not. We used both NUCLEO-G431RB and NUCLEO-G474RE boards. We also used EWARM v8.20.2, v8.30.1 and Cube IDE v1.0.2.
May I ask whether you introduced any change to the original source code, the project configuration, or any other aspect of the example? It would be helpful if you could provide us with the project you used to obtain the issue.
Thank you,
First of all thank you for this detailed analysis and the solution suggested. We do appreciate.
You're welcome.
From our side, we tried to reproduce the issue you described but could not.
I can still reproduce the issue today.
We used both NUCLEO-G431RB and NUCLEO-G474RE boards. We also used EWARM v8.20.2, v8.30.1 and Cube IDE v1.0.2.
I used a NUCLEO-G431RB and arm-none-eabi-gcc-xpack and did everything from the command line.
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (xPack GNU Arm Embedded GCC, 32-bit) 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599]
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
May I ask whether you introduced any change to the original source code
No changes whatsoever were made to the original source code.
the project configuration, or any other aspect of the example?
Yes, I changed everything. I used my own projects.
It would be helpful if you could provide us with the project you used to obtain the issue.
I've created a repository with four projects that show how the issue can be reproduced here.
project1 contains exactly the same code as the UTILS_ConfigureSystemClock example. This will be what you looked at. You think it works and it looks like it works but internally it does not work as it should. It looks like it works by accident. I would imagine that you are using a scope connected to the MCO pin and seeing what you expect to see. However, what you see on the MCO pin was set by the call to SystemClock_Config
and not by the call to LL_PLL_ConfigSystemClock_HSI
. The call to LL_PLL_ConfigSystemClock_HSI
is not functioning correctly.
project2 contains two modifications to main.c. The first change is here and the second change is here. If you run project2 you will notice that the on board LED blinks at 5Hz indicating that LL_PLL_ConfigSystemClock_HSI
returned an error.
project3 contains one modification to main.c. The call to SystemClock_Config
here has been commented out. Commenting this line out should be ok and the program should continue to function correctly. However, the program no longer functions because LL_PLL_ConfigSystemClock_HSI
never returns. This can be verified by running the program and observing that the on board LED does not blink at 0.5Hz as it should.
project4 contains four modification to main.c. The changes are here, here, here, and here. The call to LL_PLL_ConfigSystemClock_HSI
functions correctly and does not return an error. The on board LED blinks at 0.5Hz as expected.
If you have any further questions please let me know.
ST Internal Reference: 90961
Hi @fivdi,
Thank you for your contribution. The fix you requested has been implemented and is available in the frame of the STM32CubeG4 package V1.4.0 release.
This issue can be closed now. Thank you again for your contribution.
With regards,
Describe the set-up
Describe the bug The UTILS_ConfigureSystemClock example for the NUCLEO-G431RB which can be found here doesn't function correctly.
There are two problems.
Problem 1
When the example runs,
LL_PLL_ConfigSystemClock_HSI
which is called here returnsERROR
. It returnsERROR
because the PLL is enabled whenLL_PLL_ConfigSystemClock_HSI
is called. In order forLL_PLL_ConfigSystemClock_HSI
to function correctly, the application must ensure that the PLL is disabled. The PLL was enabled by calling SystemClock_Config directly before callingLL_PLL_ConfigSystemClock_HSI
.To workaround this problem the call to
SystemClock_Config
can be commented out as it's not actually needed here. However, this leads to the second problem.Problem 2
After commenting out the call to
SystemClock_Config
, the call toLL_PLL_ConfigSystemClock_HSI
hangs and never returns. This occurs because the data passed toLL_PLL_ConfigSystemClock_HSI
insUTILS_PLLInitStruct
is incorrect. Currently,sUTILS_PLLInitStruct
is initialized as follows which is incorrect:Here is how
sUTILS_PLLInitStruct
should be initialized:Notice how PLLP has been replaced with PLLR in both the comment and the code.
A similar example for the NUCLEO-G474RE which can be found here most likely suffers from the same problems.