Skip to main content
Visitor
Oct 31, 2026 3:12 AM UTC
Question

STM32F401 ADC Regular Conversion triggered by TIM1_CC1 does not start although CC1 event occurs

Hello everyone,

I am trying to understand how the ADC regular trigger source "TIM1 Capture Compare 1 Event" works on STM32F401.

My configuration is:

ADC Regular Conversion:

- External Trigger Conversion Source = TIM1 Capture Compare 1 Event

- External Trigger Conversion Edge = Rising Edge

- Continuous Conversion Mode = Disabled

TIM1:

- Counter Mode = Center Aligned Mode 2

- ARR = 2099

- CCR1 = 2000

- Channel 1 configured in Output Compare mode (TIM_OCMODE_TIMING)

I verified that the compare match occurs correctly. The TIM1 CC1 callback/interrupt is triggered, which confirms that CNT reaches CCR1 and the CC1 event is generated.

However, the ADC regular conversion never starts and HAL_ADC_ConvCpltCallback() is never called.

Interestingly, if I configure the ADC Injected Group and trigger it using TIM1 TRGO (Compare Pulse), the conversion works correctly.

This makes me wonder what exactly "TIM1_CC1" means from the ADC trigger perspective.

My questions are:

1. Does ADC regular trigger source TIM1_CC1 correspond directly to the compare match event (CC1IF)?

2. Or does it depend on the internal OC1REF signal of channel 1?

3. If channel 1 is configured in TIM_OCMODE_TIMING (or Frozen mode), should TIM1_CC1 still be able to trigger a regular ADC conversion?

4. Is there any documentation describing the internal trigger path between TIM1_CC1 and the ADC?

I am not reporting a bug, I am simply trying to better understand the hardware behavior because my experimental results do not fully match my interpretation of the reference manual.

Thank you for any clarification.

1 reply

waclawek.jan
Super User
Oct 31, 2026 8:58 AM UTC

This has been discussed here several times.

The documentation is misleading. “TIM1_CC1” in fact means the output of TIM1_CH1, as it goes to the GPIO/AF matrix. So, if you set up the respective TIM1_CH1 pin, you should see it toggle, and ADC would be triggered at moment when edge of that output signal occurs. You don’t need to set up a pin at GPIO to do that and ADC will work, but the TIM module’s output has to toggle internally. In case of TIM1, as it’s an Advanced timer, this involves not only TIM1_CCER.CC1E being set, but also TIM1_BDTR.MOE being set.

JW