Skip to main content
Stastny.Petr
Associate III
August 6, 2024
Solved

Count number of pulses on TIM1 input on STM32G031

  • August 6, 2024
  • 1 reply
  • 707 views

Hello,

I have STM32G031 and I want to use PA8 pin (TIM1_CH1) to count pulses. My idea is to read number of counted pulses every 1 second and reset counter to 0.

 

void TIM1_Init(void)
{
 // Enable TIM1 clock
 RCC->APBENR2 |= RCC_APBENR2_TIM1EN;

 // Configure TIM1 as external counter on TI1 (PA8)
 TIM1->ARR = 0xFFFF; // Set auto-reload register to maximum value
 TIM1->PSC = 0; // No prescaler

 TIM1->SMCR &= ~TIM_SMCR_SMS_Msk;
 TIM1->SMCR |= TIM_SMCR_SMS_2; // External clock mode 1
 TIM1->SMCR &= ~TIM_SMCR_TS_Msk;
 TIM1->SMCR |= TIM_SMCR_TS_2 | TIM_SMCR_TS_0; // TI1FP1 as trigger
 TIM1->CCMR1 &= ~TIM_CCMR1_CC1S_Msk;
 TIM1->CCMR1 |= TIM_CCMR1_CC1S_0; // CC1 channel is configured as input, IC1 is mapped on TI1
 TIM1->CCER &= ~TIM_CCER_CC1P; // Capture/Compare 1 output polarity: non-inverted

 // Enable counter
 TIM1->CR1 |= TIM_CR1_CEN;
}


and every 1 second reset:

 // Read counter value from TIM1
 pulse_count = TIM1->CNT;

 // Reset TIM1 counter
 TIM1->CNT = 0;

 

The result when no input is not zero but some big number. To you see where is problem?

 

There should we the easy way but does not work:

StastnyPetr_0-1722952977228.png

 

This topic has been closed for replies.
Best answer by Stastny.Petr

Solved, this is wrong settings: 

TIM1->SMCR |= TIM_SMCR_SMS_2; // External clock mode 1

This is correct:

TIM1->SMCR |= TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0; // External clock mode 2 (SMS = 111)

 

1 reply

Stastny.Petr
Stastny.PetrAuthorBest answer
Associate III
August 6, 2024

Solved, this is wrong settings: 

TIM1->SMCR |= TIM_SMCR_SMS_2; // External clock mode 1

This is correct:

TIM1->SMCR |= TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0; // External clock mode 2 (SMS = 111)