From 333dc8b53897f09d178e0b4155aa139afeecc70e Mon Sep 17 00:00:00 2001 From: Alexandre Bourdiol Date: Tue, 3 Dec 2019 18:22:57 +0100 Subject: [PATCH] HardwareTimer: Fix STM32F1 specific gpio configuration is case of input On F1 family, input alternate function must configure GPIO in input mode (not in alternate function like other STM32 families). Fixes #812 --- cores/arduino/HardwareTimer.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/cores/arduino/HardwareTimer.cpp b/cores/arduino/HardwareTimer.cpp index d077c61f38..2e03c607c7 100644 --- a/cores/arduino/HardwareTimer.cpp +++ b/cores/arduino/HardwareTimer.cpp @@ -651,8 +651,17 @@ void HardwareTimer::setMode(uint32_t channel, TimerModes_t mode, PinName pin) if (pin != NC) { if ((int)get_pwm_channel(pin) == timChannel) { - /* Configure PWM GPIO pins */ - pinmap_pinout(pin, PinMap_PWM); +#if defined(STM32F1xx) + if ((mode == TIMER_INPUT_CAPTURE_RISING) || (mode == TIMER_INPUT_CAPTURE_FALLING) \ + || (mode == TIMER_INPUT_CAPTURE_BOTHEDGE) || (mode == TIMER_INPUT_FREQ_DUTY_MEASUREMENT)) { + // on F1 family, input alternate function must configure GPIO in input mode + pinMode(pin, INPUT); + } else +#endif + { + /* Configure PWM GPIO pins */ + pinmap_pinout(pin, PinMap_PWM); + } } else { // Pin doesn't match with timer output channels Error_Handler();