2019-07-10 07:28 AM
In order to use the HAL's register callback capability, various flags are set for each peripheral in the stm32***_hal_config.h generated by CubeMX such as USE_HAL_FDCAN_REGISTER_CALLBACKS.
The issue is that these defines don't look for a prior define first, so it's not possible to override via compiler options etc and each time the project is regenerated it replaces this file.
Is there not a way that these can be set that won't be erased upon each generation?
Many thanks
2019-08-02 02:50 AM
Same on issue: https://community.st.com/s/question/0D50X0000ArRvt6/stmcubeide-usehalregistercallbacks-definition
Please ST tell us how to fix this!
2019-08-02 12:08 PM
Callback functions are defined as weak functions.
My understanding for this is if you define the same function name in your code this function will not be compiled but will use yours instead.
For example DMA half-transfer callback in my program.
In stm32f3xx_hal_adc.c callback function is defined as:
stm32f3xx_hal_adc.c
/**
* @brief Conversion DMA half-transfer callback in non blocking mode
* @param hadc ADC handle
* @retval None
*/
__weak void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(hadc);
/* NOTE : This function should not be modified. When the callback is needed,
function HAL_ADC_ConvHalfCpltCallback must be implemented in the user file.
*/
}
In main.c I have this code, this is the code the system uses.
Note exact same wording for function except delete __weak
Do not change code in library.
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
{
pgmState = Finished_half_get_ADC;
}
2019-08-02 01:32 PM
@GSome This isn't this issue that we're having, the issue is around generation of a pre-compiler flag that forces the code relating to HAL-level callbacks to be excluded from the build, preventing us from registering and using the callbacks full stop.
As an update I raised this in a support ticket with ST and was told it would be fed back to the development team.
2020-03-25 09:52 AM
Come on guys, we reported this almost a year ago and it's still a pain in the ****. Any progress?
2020-08-11 08:45 AM
It's in STM32CubeMX Project Manager > Advanced Settings > Register Callback
Credits to KnarfB who pointed it out
2021-02-10 02:48 AM
was bout to reply this as well. yes, Project Manager > Advanced Settings > Register Callback, works fine
2021-03-18 06:04 AM
Hi,
I'm using STM32CubeIDE 1.6.0. and STM32L053C8 device.
The project for the STM32L053C8 device is configured and generated using CubeIDE and integrated CubeMX configurator.
I can't find STM32CubeMX Project Manager > Advanced Settings > Register Callback in CubeMX.
I've searched on google and this forum about registering the Callback function, but without success in registering callback using methods described.
I'm not sure why in the case of HAL_TIM_PeriodElapsed_Callback() compiler attribute __weak isn't working!?
User redefinition of callback generated in file stm32l0xx_hal_tim.c results in errors because of multiple definitions, although generated callback has __weak attribute.
Defining USE_HAL_TIM_REGISTER_CALLBACKS 1 in project settings results in build with error due to multiple definitions of parameter USE_HAL_TIM_REGISTER_CALLBACKS.
Anyway, My solution is this:
In the file stm32l0xx_hal_conf.h I've forced #define USE_HAL_TIM_REGISTER_CALLBACKS 1U.
Then I wrote My own TIM21_IRQ Callback function void User_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim).
In main.c, after Timer21_Init is a call to register
MX_TIM21_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_RegisterCallback(&htim21, HAL_TIM_PERIOD_ELAPSED_CB_ID, User_TIM_PeriodElapsedCallback);
HAL_TIM_Base_Start_IT(&htim21);
This solves the problem about registering the callback, but every time the project code is regenerated by the CubeMX, I must modify the file stm32l0xx_hal_conf.h to set the #define USE_HAL_TIM_REGISTER_CALLBACKS 1U
2021-03-18 09:56 AM
Hi Mario,
I'm using STM32CubeMx Version 6.2.0, and a DEV KIT NUCLEO-G491RE
In Project Manager....Advanced setting... there's a box on the right called "Register Callback". There you can find all callbacks you can ENABLE or DISABLE.
I tried to enable for FDCAN and after regenerating files, i can find in stm32g4xx_hal_conf.h the expected line:
#define USE_HAL_FDCAN_REGISTER_CALLBACKS 1U
Hope this can help you.
Best Regards.
Roberto.
2021-03-19 10:44 AM
Roberto,
Yes, this is what I need and it helps.
Like I was blind that I didn't see the right side of the configurator :)
Thank you very much.