Мне думается, что тут не "и", а "или" (хотя бы один из /32K или /RD не установлен)Код:if(workAddrDiapason!=0) // Если сигналы /32К и /RD физически не установлены в 0
Вид для печати
Мне думается, что тут не "и", а "или" (хотя бы один из /32K или /RD не установлен)Код:if(workAddrDiapason!=0) // Если сигналы /32К и /RD физически не установлены в 0
Да, именно так. В if-ветке обрабатывается ситуация когда не оба в нуле, там режим ножки выставляется как input чтобы не влиять этой ножкой на подключаемую схему. В else-ветке включается режим выхода и выставляется нужное значение на ножке (в эксперименте-1 выставляю 0, в эксперименте-2 выставляю 1).
Для варианта выставления нуля (эксперимент-1), этот ноль выставляется на слишком короткое время. Ноль должен удерживаться как минимум до момента восходящего фронта на желтой линии. После этого еще нужно время чтобы STM-ка поняла, что не оба сигнала в нуле, и только после этого перестать удерживать ноль. А по графику мы видим, что ноль перестает удерживаться гораздо раньше. И почему так происходит, я не могу понять.
Еще из мыслей навскидку - не доверяю локальным переменным с областью видимости в пределах ветки цикла. Попробуйте вынести объявление переменной повыше, или вообще сделайте ее статической/volatile.
uint32_t workAddrDiapason