2022-12-04 01:21 PM
Hi,
i have started this project using X-Cube-IOTA1 package and i added all libraries i need to replicate the same project example which is IOTA-Client. i manage to compile my version and run in the the STM32 B-L4S5-IOTA1 using freeRTOS, but the problem is, the program stuck (infinite loop, or hangs out) in the "WIFI_RESET_MODULE();" in "SPI_WIFI_ResetModule(...)" function, is hangs exactly in the HAL_Delay(500), if i lower the period to 10 it works also, if i keep the 500 period and remove the HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET); (which is located just before that HAL_Delay(500)) also the program works. so i don't think it's a problem from HAL_Gettick() which happen to other ppl and it returns 0 all the time, it's not in my case, also the interruption of systick is fine, i spend days looking for answer but i couldn't find the correct solution.
so if someone have a clue what's going on or what is the problem and how to solve it, i will be thankful, and if you need to see the whole project, i will upload it to github
best regards
-- update --
The section i'm having a problem with is this:
#define WIFI_RESET_MODULE() do{\
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_RESET);\
HAL_Delay(10);\
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET);\
HAL_Delay(500);\ << I'm stuck here>>
}while(0);
if i lower the 500 period to 10, it's not stuck any more, also if i remove the HAL_GPIO_WritePin(GPIOE, GPIO_PIN_8, GPIO_PIN_SET) i don't face this issue for this macro.
2022-12-04 07:13 PM
I recall that the default systick for hal delay could use other hw timers, especially when rtos were used. Related topic?
2022-12-04 10:43 PM
Are you really 100% sure that Systick has highest interrupt priority in case it is called from some ISR?
2022-12-05 01:52 AM
Hi,
i had this issue even when i didn't use freeRTOS, also i tested again the project after i changed the timebase source of the SYS mode in the device configuration tools (i used TIM6) and still the same issue.
2022-12-05 02:03 AM
Check whether uwTick is incrementing.
2022-12-05 02:06 AM
Hi,
i changed the interrupt priority to 0 (it was 15)
#define TICK_INT_PRIORITY 0U /*!< tick interrupt priority */
and still the same problem, also i'm using TIM6 as timebase source,
2022-12-05 02:13 AM
Hi,
i get stuck in Hal_Gettick(); so it doesn't return 0 or something, because the previous delay is working fine, i did an update in the topic, have a look please
2023-06-28 07:58 AM - edited 2023-06-28 08:06 AM
Hi,
I had the same problem.
There is a very nice description on digikey how to change the timebase for HAL getting-started-with-stm32-introduction-to-freertos on digikey .
The important snippet out of that:
SysTick is a special timer in most ARM processors that’s generally reserved for operating system purposes. By default, SysTick in an STM32 will trigger an interrupt every 1 ms. If we’re using the STM32 HAL, by default, SysTick will be used for things like HAL_Delay() and HAL_GetTick(). As a result, the STM32 HAL framework gives SysTick a very high priority. However, FreeRTOS needs SysTick for its scheduler, and it requires SysTick to be a much lower priority.
We can fix this conflict in a few ways, but the easiest is to assign another, unused timer as the timebase source for HAL. Timers 6 and 7 in most STM32 microcontrollers are usually very basic, which makes them perfect as a timebase for HAL. Go to System Core > SYS and under Mode, change the Timebase Source to TIM6.
This not fully solved my problem. The other points where: