2023-11-22 05:36 AM
Dear STM Support Team,
I am currently working on a project using the STM32H747I-Discovery Kit and have encountered an issue during system initialization. After integrating code from the STemWin_HelloWorld example and successfully compiling, the HAL_Init() function returns HAL_ERROR.
Upon debugging, I have found that the common_system_clock variable is being set to zero when returning from the following block of code:
#if defined(RCC_D1CFGR_D1CPRE)
common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU);
#else
// Other conditionals or relevant code
#endif
HAL_RCC_GetSysClockFreq() correctly returns a value that corresponds to 64MHz, so the issue seems to arise during the prescaler application. This leads to a situation where common_system_clock becomes zero, which should not be the case.
I have double-checked the clock configurations, prescaler settings, and the relevant RCC registers but have not found any discrepancies that could lead to this issue.
Could you please advise on what might be causing this behavior or provide any additional steps to troubleshoot this problem? I am using the latest HAL library version recommended for STM32H747I-Discovery.
Thank you in advance for your support.
Solved! Go to Solution.
2023-11-24 05:44 AM
Hello,
As much as I am aware, to create a new C Make Project
CMakeLists.txt, and cubeide-gcc-cmake files should be generated.
If you already have a valid CMakeList you can simply import source files:
Select: Location where to create the project (.project-file).
Note: the generated project is only a template to provide the project skeleton.
For more details check this app note How to use CMake in STM32CubeIDE - Application note
To give better visibility on the answered topics, please click on Accept as Solution on the reply which solved your issue or answered your question.
2023-11-24 05:55 AM
@FBL ,
I could resolve the IDE related problems with my project(I believe so). Now I am able to see the values for the RCC registers while debugging. But the D1CorePrescTable value seem to be different from what I saw in the example. What could be the possible reasons for that value get changed.
2023-11-24 07:10 AM
@FBL Can you tell me what could be the possible reasons for change in D1CorePrescTable?
Name : D1CorePrescTable
Details:"# \036IûhQø#0yh\003û\001ñ"
Default:0x240029e0 <D1CorePrescTable>
Decimal:603990496
Hex:0x240029e0
Binary:100100000000000010100111100000
Octal:04400024740
common_system_clock = HAL_RCC_GetSysClockFreq() >> ((D1CorePrescTable[(RCC->D1CFGR & RCC_D1CFGR_D1CPRE)>> RCC_D1CFGR_D1CPRE_Pos]) & 0x1FU)
HAL_RCC_GetSysClockFreq returns 64000000
RCC->D1CFGR = 0
RCC_D1CFGR_D1CPRE = 3840
RCC_D1CFGR_D1CPRE_Pos = 8
But the D1CorePrescTable[16] = {0, 0, 0, 0, 1, 2, 3, 4, 1, 2, 3, 4, 6, 7, 8, 9} initialised got changed due to some reason. I don't know how and why. Any suggestion to debug to understand this.
2023-11-24 12:57 PM
Issue identified and fixed. Thank you for the suggestions and support. Issue was in the linker script. Accidentally I changed the .rodata assigned to RAM.