diff --git a/os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c b/os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c index b3ca69b8f..7cd343f51 100644 --- a/os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c +++ b/os/hal/ports/STM32/LLD/GPIOv2/hal_pal_lld.c @@ -177,7 +177,7 @@ void _pal_lld_setgroupmode(ioportid_t port, port->OTYPER = (port->OTYPER & ~m1) | otyper; port->OSPEEDR = (port->OSPEEDR & ~m2) | ospeedr; port->PUPDR = (port->PUPDR & ~m2) | pupdr; - if (moder == PAL_STM32_MODE_ALTERNATE) { + if ((mode & PAL_STM32_MODE_MASK) == PAL_STM32_MODE_ALTERNATE) { /* If going in alternate mode then the alternate number is set before switching mode in order to avoid glitches.*/ if (bit < 8) diff --git a/os/hal/ports/STM32/LLD/GPIOv3/hal_pal_lld.c b/os/hal/ports/STM32/LLD/GPIOv3/hal_pal_lld.c index 7b85fe45f..e55c0c697 100644 --- a/os/hal/ports/STM32/LLD/GPIOv3/hal_pal_lld.c +++ b/os/hal/ports/STM32/LLD/GPIOv3/hal_pal_lld.c @@ -163,7 +163,7 @@ void _pal_lld_setgroupmode(ioportid_t port, port->ASCR = (port->ASCR & ~m1) | ascr; port->OSPEEDR = (port->OSPEEDR & ~m2) | ospeedr; port->PUPDR = (port->PUPDR & ~m2) | pupdr; - if (moder == PAL_STM32_MODE_ALTERNATE) { + if ((mode & PAL_STM32_MODE_MASK) == PAL_STM32_MODE_ALTERNATE) { /* If going in alternate mode then the alternate number is set before switching mode in order to avoid glitches.*/ if (bit < 8) diff --git a/readme.txt b/readme.txt index 18488a711..dcb5f1a72 100644 --- a/readme.txt +++ b/readme.txt @@ -153,6 +153,8 @@ - RT: Merged RT4. - NIL: Merged NIL2. - NIL: Added STM32F7 demo. +- HAL: Fixed setting alternate mode in STM32 GPIOv3 and GPIOv3 drivers can fail + (bug #813)(backported to 16.1.7). - HAL: Fixed incorrect handling of shared ISRs in STM32 DMAv1 driver (bug #812)(backported to 16.1.7). - HAL: Fixed protocol violation in usbDisableEndpointsI() API (bug #811)