From 3d1afb814211328b8c044ee3dd22d39a077afba6 Mon Sep 17 00:00:00 2001 From: raulMrello Date: Mon, 4 May 2015 09:16:01 +0200 Subject: [PATCH] Updated pinmap.c in target_stm32f1 --- .../targets/hal/TARGET_STM/TARGET_STM32F1/pinmap.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F1/pinmap.c b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F1/pinmap.c index d311a0c3c83..f03f4dac52e 100644 --- a/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F1/pinmap.c +++ b/libraries/mbed/targets/hal/TARGET_STM/TARGET_STM32F1/pinmap.c @@ -177,12 +177,22 @@ void pin_mode(PinName pin, PinMode mode) if (pin_index < 8) { if ((gpio->CRL & (0x03 << (pin_index * 4))) == 0) { // MODE bits = Input mode gpio->CRL |= (0x08 << (pin_index * 4)); // Set pull-up / pull-down + gpio->CRL &= ~(0x08 << ((pin_index * 4)-1)); // ENSURES GPIOx_CRL.CNFx.bit0 = 0 } } else { if ((gpio->CRH & (0x03 << ((pin_index % 8) * 4))) == 0) { // MODE bits = Input mode gpio->CRH |= (0x08 << ((pin_index % 8) * 4)); // Set pull-up / pull-down + gpio->CRH &= ~(0x08 << (((pin_index % 8) * 4)-1)); // ENSURES GPIOx_CRH.CNFx.bit0 = 0 } } + // Now it's time to setup properly if pullup or pulldown. This is done in ODR register: + // set pull-up => bit=1, set pull-down => bit = 0 + if(mode == PullUp){ + gpio->ODR |= (0x01 << (pin_index)); // Set pull-up + } + else{ + gpio->ODR &= ~(0x01 << (pin_index)); // Set pull-down + } break; case OpenDrain: // Set open-drain for Output mode (General Purpose or Alternate Function)