The problem has been solved.
Initially, CubeMX was configured with:
- Dead Time = 50
- Asymmetrical Dead Time = Enabled
- Falling Dead Time = 50
However, when I inspected the TIM1 registers, I found:
Plain Text
DTAE = 1
DTGF = 0
This indicated that the asymmetrical dead-time mode was enabled, but the falling dead-time value was not actually loaded into the DTGF field of the DTR2 register.
While investigating, I changed the Falling Dead Time parameter in CubeMX from a numeric value to a user-defined constant:
C
#define DEADTIME_FALL 50
After regenerating the code, CubeMX generated:
C
LL_TIM_SetFallingDeadTime(TIM1, DEADTIME_FALL);
Unexpectedly, after changing the parameter back to the numeric value and regenerating again, everything continued to work correctly.
The final register contents became:
Plain Text
DTAE = 1
DTGF = 50 (0x32)
and the generated code correctly initializes the falling dead time.
So the issue was not a hardware problem. Most likely CubeMX had an internal configuration/code-generation inconsistency that was resolved after forcing a regeneration by temporarily using a symbolic constant.
Final status:
Plain Text
Asymmetrical Dead Time: Enabled
Rising Dead Time: 50
Falling Dead Time: 50
DTAE = 1
DTGF = 50
The TIM1 dead-time configuration is now working as expected.