Serial.read эхо-спамит со свободным пином rx

Тема в разделе "Микроконтроллеры AVR", создана пользователем DayGaik, 22 мар 2026.

  1. DayGaik

    DayGaik Гик

    Atmega328p.
    В недрах loop регулярно вызывается код
    Код (C++):
                   
    while (Serial.available()) {
        int ch = Serial.read();
        switch (ch) {
     
    Заметил, что когда пин RX (PD0) свободно висит на плате, то в этом месте начинается какой-то бесконечный эхо-спам:
    Код (Text):

    659 Periph: +
    659 nextState is 2
    659 Event: StateExit 2
    659 Event: StateEnter 1
    659 display()
    694 pressedInSleep: 0 1
    694 displayUpdate()
    694 RECV: 6
    694 RECV: 5
    694 RECV: 9
    694 RECV:
    694 Debug key pressed
    694 Event: DebugKeyPressed 32
    694 RECV: P
    694 RECV: e
    694 RECV: r
    694 RECV: i
    694 RECV: p
    694 RECV: h
    694 RECV: :
     
    То есть то что я выдаю в Tx (отладочный лог) попадает в Rx.

    Спам такой, что из цикла while исполнение не выходит и устройство зависает.

    На плате в этом месте ничего мудрого нет:
    upload_2026-3-22_11-33-48.png

    Стоит подключить что-то: считыватель карт или плату arduino uno с извлеченным МК, то эхо-спам прекращается.

    Может я грязно припаял разъем (P3)? Сопротивление между TX и RX ~1.5 МОм - кажется норм.

    При эксплуатации к контакту будет подключен считыватель, но не хочется чтобы все устройство умирало, если считыватель отвалится.

    Подскажите, почему так и что можно/нужно сделать?
     
  2. parovoZZ

    parovoZZ Гуру

    включи подтяжку пина и всё прекратится. Вообще, даже в даташите на МК говорится, что не надо оставлять неиспользуемые пины свободно "висящими". Либо сконфигурировать их на выход (рекомендуется), либо подключить через резистор или напрямую к какому-либо уровню.
     
  3. DayGaik

    DayGaik Гик

    Хм. Спасибо. 10к на землю пойдет?
     
  4. parovoZZ

    parovoZZ Гуру

    Если говорить о пине Rx, то для него лучше резистор на +. Для uart это означает свободность шины.
     
  5. DayGaik

    DayGaik Гик

    Ага, спасибо!

    Припаял резистор, но не помогло пока с обоих сторон не потер хорошенько плату щеткой со спиртом.

    Но теперь классно работает! Спасибо еще раз!

    PS. Я люблю и ненавижу паять)