From 1ab5125fc829dacb22233198e5455b913bae35ea Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Fri, 1 Aug 2025 12:55:27 +0700 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B8=20=D0=BE=D1=82=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=A8=D0=98=D0=9C=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8?= =?UTF-8?q?=D0=B3=D1=83=D1=80=D0=B8=D1=80=D1=83=D0=B5=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D1=8B=D1=85=D0=BE=D0=B4=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=B5=20=D1=84=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D0=B9=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B8=20=D0=B8=20=D1=82=D1=83=D0=B3=D0=B3=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cores/arduino/wiring_digital.c | 35 +++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c index e4f6633..4547e95 100644 --- a/cores/arduino/wiring_digital.c +++ b/cores/arduino/wiring_digital.c @@ -37,7 +37,7 @@ void pinMode(uint32_t PinNumber, uint32_t PinMode) return; } - if (digitalPinPwmIsOn(PinNumber)) + if (digitalPinPwmIsOn(PinNumber) > 0 ) // if the pin use PWM, disable PWM analogWriteStop(PinNumber); @@ -102,15 +102,22 @@ __attribute__((noinline, section(".ram_text"))) void digitalWrite(uint32_t PinNu ErrorMsgHandler("digitalWrite(): pin number exceeds the total number of pins"); return; } - - if (digitalPinPwmIsOn(PinNumber)) + + GPIO_TypeDef* port = digitalPinToPort(PinNumber); + HAL_PinsTypeDef mask = digitalPinToBitMask(PinNumber); + + if (digitalPinPwmIsOn(PinNumber) > 0) + { // if the pin use PWM, disable PWM analogWriteStop(PinNumber); - + // and configure pin as output + HAL_GPIO_PinConfig(port, mask, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + } + if (Val == HIGH) - GPIO_SET_PIN(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber)); + GPIO_SET_PIN(port, mask); else - GPIO_CLEAR_PIN(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber)); + GPIO_CLEAR_PIN(port, mask); } // read pin @@ -122,9 +129,9 @@ __attribute__((noinline, section(".ram_text"))) int digitalRead(uint32_t PinNumb return -1; } - if (digitalPinPwmIsOn(PinNumber)) + if (digitalPinPwmIsOn(PinNumber) > 0) // if the pin use PWM, disable PWM - analogWriteStop(PinNumber); + analogWriteStop(PinNumber); // pin is configured as input here return GPIO_READ_PIN(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber)); } @@ -138,11 +145,17 @@ __attribute__((noinline, section(".ram_text"))) void digitalToggle(uint32_t PinN return; } - if (digitalPinPwmIsOn(PinNumber)) + GPIO_TypeDef* port = digitalPinToPort(PinNumber); + HAL_PinsTypeDef mask = digitalPinToBitMask(PinNumber); + + if (digitalPinPwmIsOn(PinNumber) > 0) + { // if the pin use PWM, disable PWM analogWriteStop(PinNumber); - - GPIO_TOGGLE_PIN(digitalPinToPort(PinNumber), digitalPinToBitMask(PinNumber)); + // and configure pin as output + HAL_GPIO_PinConfig(port, mask, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + } + GPIO_TOGGLE_PIN(port, mask); } #ifdef __cplusplus