2024-03-22 03:19 AM - edited 2024-03-22 03:20 AM
Hello,
I am working with timers in a stm32 project. In the generic INIT function that is generated using the .ioc file important functions like HAL_PWM_Init(), HAL_TIMEx_MasterConfigSynchronization() etc are understandably called outside the user code sections. Now, I want to customize the init function so that I can use variables for prescaler, period etc. For that I need to add user code and call functions like PWM_init and ConfigSync again after they are already called(?) Wouldn't that be inefficient? Alternatively, if I remove the code outside the user code section or completely remove the function itself it will reappear once I generate code after making some changes to the .ioc file. I can make custom init functions but the init functions will still remain in the code. I know I can stop using the generate code functionality but is there some way around it where I can have my cake and eat it too? Modify code outside the user code sections and it not be overwritten when I need other peripherals' code added/modified using the .ioc file?
Solved! Go to Solution.
2024-03-22 01:17 PM
When you click on the line to edit, say, the PWM "Pulse" line, look at the right-hand edge of the line and you will see a "gear" icon. Click on that and select "no check". Then you can enter your function or variable name in that field. Alas I am not at a computer with CubeMX installed so I can't post a picture. Then make sure you add the function prototype or variable "extern" declaration (or include the proper file) up the user sections at the top of the tim.c file.
I do this with I2C slave addresses that are determined at run time, among other things.
2024-03-22 01:17 PM
When you click on the line to edit, say, the PWM "Pulse" line, look at the right-hand edge of the line and you will see a "gear" icon. Click on that and select "no check". Then you can enter your function or variable name in that field. Alas I am not at a computer with CubeMX installed so I can't post a picture. Then make sure you add the function prototype or variable "extern" declaration (or include the proper file) up the user sections at the top of the tim.c file.
I do this with I2C slave addresses that are determined at run time, among other things.
2024-03-25 07:48 AM
@Avi_8 wrote:I can make custom init functions but the init functions will still remain in the code. I know I can stop using the generate code functionality but is there some way around it where I can have my cake and eat it too? Modify code outside the user code sections and it not be overwritten when I need other peripherals' code added/modified using the .ioc file?
You could simply not put any timer setup in the .ioc ?
ie, Put the other peripheral configs in the .ioc and, effectively, do the Timer(s) "manually" ?