Почему порты UART не работают на коммутационной плате Portenta?
Я использую коммутационную плату Portenta Arduino, подключенную к Portenta H7 для проекта, над которым я работаю. Проект требует от меня использования трех датчиков Adafruit Ultimate GPS и подключения каждого к собственным портам UART на Portenta. секционная доска. Я использую только UART0, UART1 и UART2 (соответственно Serial, Serial1 и Serial2).
Чтобы получить данные, я использовал этот пример кода из Arduino IDE:
// Тестовый код для Ultimate GPS с использованием аппаратного последовательного порта
// (например, GPS для Леонардо, Флоры или FeatherWing)
//
// Этот код показывает, как проверить сквозное соединение между USB и последовательным интерфейсом оборудования.
//
// Протестировано и отлично работает с Adafruit GPS FeatherWing.
// ------> https://www.adafruit.com/products/3133
// или Флора GPS
// ------> https://www.adafruit.com/products/1059
// но также работает со щитом, прорывом
// ------> https://www.adafruit.com/products/1272
// ------> https://www.adafruit.com/products/746
//
// Купите его сегодня в магазине электроники Adafruit.
// и помогаем поддерживать оборудование с открытым исходным кодом & программное обеспечение! -ада
// как называется аппаратный последовательный порт?
#define GPSSerial Serial1
void setup() {
// делаем эту скорость передачи данных достаточно быстрой, чтобы мы ее не ждали
Serial.begin(115200);
// ждем появления серийного номера оборудования
while (!Serial) delay(10);
// 9600 бод — скорость по умолчанию для Ultimate GPS
GPSSerial.begin(9600);
}
void loop() {
if (Serial.available()) {
char c = Serial.read();
GPSSerial.write(c);
}
if (GPSSerial.available()) {
char c = GPSSerial.read();
Serial.write(c);
}
}
Этот код работает для Serial1, и я получаю данные, когда подключаю GPS к порту UART1 коммутационной платы. Когда я вызываю Serial или Serial2, меняя #define GPSSerial Serial1
на #define GPSSerial Serial
или #define GPSSerial Serial2
, код будет загружен с помощью ошибок нет, но я не получаю никаких данных от GPS, когда он подключен к соответствующему порту UART (UART0 и UART2).
Я проверил, поступают ли данные автоматически только с порта UART1, но ничего не отображается, когда я вызываю Serial или Serial2, чего и следовало ожидать.
Кто-нибудь знает, как решить эту проблему? Могут ли порты UART0 и UART2 не передавать данные на плату Portenta H7, поэтому я не вижу никаких данных?
Пожалуйста, дайте мне знать, если мне нужно что-то уточнить.
@rcs13, 👍2
1 ответ
Я только что потратил день на поиск этой проблемы. Причина в том, что Arduino нарушил правила именования этих портов UART. Пожалуйста, смотрите таблицу ниже. Я создал эту таблицу на основе схемы Portenta и Схема коммутационной платы.
Схема разводки | П. Схема @ J1,J2 | П. Схема @ Micro | Микроконтакт (tx,rx) | pins_arduino.h |
---|---|---|---|---|
UART0 | Серийный2 | UART4 | (PA0,PI9) | не определено |
UART1 | Серийный1 | LPUart | (PA9,PA10) | Может быть, Серия 1? |
UART2 | Серийный номер3 | UART6 | (PG14,PG9) | не определено |
UART3 | Последовательный4 | UART8 | (PJ8,PJ9) | Серия 3 |
К сожалению, как вы можете видеть, встроенные определения последовательных портов в pins_arduino.h не будут работать для коммутационной платы. (если вы не используете Serial 1 или Serial 3)
Если вы хотите использовать другие последовательные порты, вам необходимо определить свои собственные последовательные порты, что на самом деле не так уж и сложно. Вам просто нужно вручную указать контакты, и все готово.
#include "Serial.h"
UART UART0Breakout = UART(PA_0, PI_9);
UART UART2Breakout = UART(PG_14, PG_9);
void setup()
{
UART0Breakout.begin(115200);
UART2Breakout.begin(115200);
}
Надеюсь, это вам поможет! Это, конечно, на какое-то время свело меня с ума. К сожалению, схема, которую я использовал для коммутационной платы, не была так хорошо аннотирована, как та, которую я привел здесь (я нашел ее, когда писал этот ответ).
- Последовательная связь между несколькими устройствами (или ардуино)
- SIM800L не отвечает на AT-команды
- Как импортировать данные с SD-карты на Arduino на компьютер, используя последовательный/COM-порт Arduino?
- Проблема последовательной связи с общей землей SIM800L
- Arduino UARTS Автоматическая адресация ведомых устройств
- Связь UART - серийный номер всегда пуст
- Как связаться между Arduino Uno и ESP8266 через последовательные порты TX/RX?
- Как узнать частоту дискретизации?