stm32f0 читает ноги без инициализации пинов

Блог персональный. Но случай не вполне заурядный, пишу себе на память и случай и как я жестко тупил.

Однажды инициализация пинов в основном файле меня начала раздражать и была вынесена доп файл. Запускать — не запускал, пока не допишу чтение всего. Железяка новая, все 20 пинов — заняты.
После написания черновика и прошивки, железяка странно реагировала на кнопки и тумблеры. Как бы с задержкой в 2-3 секунды.

Думал, функции фильтрации дребезга. Подтяжки-оттяжки в функции инициализации тоже не помогали. Не было на выводах притяжки к питанию, хоть тресни. МК сдул/надул, сгорел, мало ли.

Ответ оказался прост: функция иницализации пинов после переноса не была вызвана.
Тактирование портов было включено процедурами инициализации соседней периферии, но входы ввода-вывода не были инициализированы и при этом прекрасно, но медленно читались.
Т.е. нажимаю кнопку — замыкаю «подтянутый к+» вывод на землю. Через мгновение программа «видит» ноль. Отпускаю кнопку, через пару секунд (фильтр дребезга через скользящее среднее) становится «1». Будто бы подтяжка есть.

Видимо, паразитная емкость мосфетов + пусть и мномегаомное, но имеющееся в наличии сопротивление сыграли в RC фильтр и все же подтяжку.

Ну и после прошивки чип закирпичивается. Connetcion under reset почему-то требует кнопку reset, через ST-Link оно что-то не работает. Это второй урок.
  • 0
  • 09 февраля 2017, 14:02
  • igorp