Serial Monitor в Arduino работает, но другой последовательный терминал работает только в одном направлении

У меня есть код Arduino, работающий на Adafruit Feather STM32F405 Express, и пока я тестирую его с помощью последовательного монитора Arduino, все работает идеально. Поскольку я хочу использовать последовательный терминал (приложение на C# или "Терминал Br@y++") через тот же COM-порт, я могу писать свои команды, они выполняются (выходные контакты отправляют ожидаемый сигнал), но я не получил последовательную обратную связь.

Мой код Arduino :

void setup() {
  Serial.begin(115200); // initialise USB Serial Port
  pinMode(pumpP, OUTPUT);  // Pump Pin is an output
}
void loop() {
    if (Serial.available() > 0) {
      command = Serial.readStringUntil('\n');
    }
    if (command == "do-it"){
        digitalWrite(5, HIGH);
        Serial.println("did it!");
    }
}

На последовательном мониторе Arduino я пишу "сделай это", и я получил "сделал это!", и я вижу, как меняется уровень вывода 5. Во всех последовательных приложениях, которые я мог бы использовать, я вижу, как меняется уровень вывода 5, но не "сделал это!".

Я настроил Arduino, как описано на этой странице Adafruit : https://learn.adafruit.com/adafruit-stm32f405-feather-express/arduino-ide-setup [ краткое описание: используйте библиотеку STM32F4, номер платы = "Adafruit Feather STM32F405", поддержка USB = "CDC ( универсальный последовательный заменяет USART)", метод загрузки = "STM32CubeProgrammer (DFU)" ] И я подключаю вывод DFU к 3,3 В во время загрузки и сбрасываю плату после этого.

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

, 👍1

Обсуждение

Это похоже на проблему с программами последовательного терминала. В конце концов, они должны сделать то же самое: подключиться к COM - порту, настроить его и прослушивать/отправлять на нем. Поэтому, если они не работают, но последовательный монитор Arduino работает, это будет означать, что они делают что-то не так., @chrisl

Убедитесь, что ваша программа последовательного терминала утверждает флаги DTR и RTS порта CDC/ACM., @Majenko

Это "своего рода работа". Мне нужно подключиться без функции RTS, и после подключения я нажимаю кнопку RTS, и она работает. Когда я подключаюсь с включенной функцией RTS, она не получает никакого сообщения. Кажется немного странной и не стабильной рабочей вещью. Следует ли активно включать/выключать DTR перед каждым ожидаемым сообщением ? когда я держал его на высоком уровне, он не работал (за исключением одного или 2 сообщений)., @2diabolos.com


1 ответ


1

Спасибо @Majenko, вы дали решение : Я поставил галочку "RTS/CTS" в разделе "рукопожатие" терминала Брэя, и я получил все свое серийное сообщение от STM32.

Я предполагаю, что это распространенное мнение о большем, чем stm32? как вы узнали, это где-то написано в документации по Arduino?

для таких людей, как я, которые не знают, что такое RTS/CTS, вот вы: http://www.brainboxes.com/faq/items/what-is-rts--cts-hardware-flow-control - или не так прямолинейно https://en.wikipedia.org/wiki/RS-232#RTS,_CTS,_and_RTR

Забавно понять, что эта "5-контактная связь" виртуализируется в USB.

@Majenko: если вы хотите "владеть" решением, я позволю вам написать его самостоятельно, я установлю ваш ответ в качестве решения.

,

У меня была аналогичная проблема с Adafruit Feather M0 Express, который использует чип ATSAMD, и включение DTR (DtrEnable класса SerialPort) в моей программе C# устранило эту проблему для меня., @drojf