This example shows how to use the TIM peripheral to measure the frequency and
duty cycle of an external signal.
The TIM1CLK frequency is set to SystemCoreClock (Hz), the Prescaler is 0 so the
counter clock is SystemCoreClock (Hz).
SystemCoreClock is set to 180 MHz for STM32F469xx Devices.
TIM1 is configured in PWM Input Mode: the external signal is connected to
TIM1 Channel2 used as input pin.
To measure the frequency and the duty cycle, we use the TIM1 CC2 interrupt request,
so in the TIM1_CC_IRQHandler routine, the frequency and the duty cycle of the external
signal are computed.
"uwFrequency" variable contains the external signal frequency:
TIM1 counter clock = SystemCoreClock,
Frequency = TIM1 counter clock / TIM1_CCR2 in Hz,
"uwDutyCycle" variable contains the external signal duty cycle:
DutyCycle = (TIM1_CCR1*100)/(TIM1_CCR2) in %.
The minimum frequency value to measure is (TIM1 counter clock / CCR MAX)
= (180 MHz)/ 65535
= 2747 Hz
@note Care must be taken when using HAL_Delay(), this function provides accurate delay (in milliseconds)
based on variable incremented in SysTick ISR. This implies that if HAL_Delay() is called from
a peripheral ISR process, then the SysTick interrupt must have higher priority (numerically lower)
than the peripheral interrupt. Otherwise the caller ISR process will be blocked.
To change the SysTick interrupt priority you have to use HAL_NVIC_SetPriority() function.
@note The application need to ensure that the SysTick time base is always set to 1 millisecond
to have correct HAL operation.
@note The connection of the LCD reset pin to a dedicated GPIO PK7 instead of the STM32F469 NRST pin may cause residual display on LCD with applications/examples that do not require display.