diff --git a/bsl/csl/stm32f042/Src/pin.c b/bsl/csl/stm32f042/Src/pin.c index acd5fe9..48987ea 100644 --- a/bsl/csl/stm32f042/Src/pin.c +++ b/bsl/csl/stm32f042/Src/pin.c @@ -121,14 +121,17 @@ void pinSetSpeed(pinNo_t pinNo, pinSpeed_t speed) void pinSetAlternate(pinNo_t pinNo, uint16_t alternate) { - if(PIN_NO < 8) + if(altFunc_List[PIN_PORT][PIN_NO] & (1<<(7-alternate))) //chekc if alternate function is awailble { - PIN_BASE->AFR[0] &= ~(0x0F << (PIN_NO * 4)); - PIN_BASE->AFR[0] |= ((alternate & 0x0F) << (PIN_NO * 4)); - return; + if(PIN_NO < 8) + { + PIN_BASE->AFR[0] &= ~(0x0F << (PIN_NO * 4)); + PIN_BASE->AFR[0] |= ((alternate & 0x0F) << (PIN_NO * 4)); + return; + } + PIN_BASE->AFR[1] &= ~(0x0F << ((PIN_NO-8) * 4)); + PIN_BASE->AFR[1] |= ((alternate & 0x0F) << ((PIN_NO-8) * 4)); } - PIN_BASE->AFR[1] &= ~(0x0F << ((PIN_NO-8) * 4)); - PIN_BASE->AFR[1] |= ((alternate & 0x0F) << ((PIN_NO-8) * 4)); } void pinConfig(pinNo_t pinNo, pinMode_t mode, pinStage_t stage, pinPullUpDown_t resistance, pinSpeed_t speed)