при отключении ШИМ вывод конфигурируется на выход при вызове функций записи и туггла

This commit is contained in:
KLASSENTS 2025-08-01 12:55:27 +07:00
parent 200079b966
commit 1ab5125fc8

View File

@ -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