[HAL][STM32] Incorrect if check in pal_lld.c
Posted: Tue Jan 03, 2017 5:24 pm
It seems like an if check implemented in function _pal_lld_setgroupmode for STM32/LLD/GPIO version 2 and version 3 is incorrect. The if check can only become true when the input ioportmask_t mask equals 0x01.
ChibiOS: 16.1.6
SVN: branches/stable_16.1.x@10005
ChibiOS: 16.1.6
SVN: branches/stable_16.1.x@10005
Code: Select all
diff --git a/os/hal/ports/STM32/LLD/GPIOv2/pal_lld.c b/os/hal/ports/STM32/LLD/GPIOv2/pal_lld.c
index b4545f094..dc1f1d71e 100644
--- a/os/hal/ports/STM32/LLD/GPIOv2/pal_lld.c
+++ b/os/hal/ports/STM32/LLD/GPIOv2/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/pal_lld.c b/os/hal/ports/STM32/LLD/GPIOv3/pal_lld.c
index b45f7fe15..11969863a 100644
--- a/os/hal/ports/STM32/LLD/GPIOv3/pal_lld.c
+++ b/os/hal/ports/STM32/LLD/GPIOv3/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)