Не знаю правильно ли сюда писать, потому что речь идет о программировании STM32. Но я её программирую через FLProg 6.3.1.
У меня идут какие-то срабатывания по линии дискретного входа, идут случайным образом. Галка "защита от дребезга" на входе стоит. Я смотрю в исходник, программа генерирует такой код:
bool _bounceInputTmpD11 = (digitalRead (11));
if (_bounseInputD11S)
{
if (millis() >= (_bounseInputD11P + 40))
{_bounseInputD11O= _bounceInputTmpD11; _bounseInputD11S=0;}
}
else
{
if (_bounceInputTmpD11 != _bounseInputD11O )
{_bounseInputD11S=1; _bounseInputD11P = millis();}
Код понятен: система считывает текущее состояние входа, сравнивает с предыдущим и если поменялось, то запоминает время и ставит флаг (блок else нижний). При следующих проходах она проверяет флаг и если заданное время истекло, то присваивает выходу текущее состояние и флаг убирает. Только текущее состояние может быть уже новым, ведь система его сохраняет в самом начале этого участка кода. Т.е. после установки флага выдержки времени, она уже не проверяет на изменение сигнала, а разве защита от дребезга не в том, чтобы поймать уже стабильный сигнал?