В SAMD51 Serial.println() ведет себя так, как ожидалось (один \r\n). Однако на STM32 (с использованием ядра STM32Duino) я наблюдаю «двойной» возврат каретки/перевод строки при определенных условиях.
Признаки:
- При печати шестнадцатеричных буферов или числовых значений: Serial.println(0x01fff); → Вывод: 01fff\r\n (правильно)
- При печати строковых констант или кодов ошибок: Serial.println("ERROR QUEUE EMPTY"); → Вывод: ERROR QUEUE EMPTY\r\n\r\n (неожиданный дополнительный CRLF)
- Среда: PlatformIO (оба)
- Ядро: STM32Duino
- Аппаратное обеспечение: STM32F446RE (NUCLEO)
- Сравнение: То же код работает безупречно на SAMD51 (Adafruit Core).
- Я проверил, содержат ли мои строковые константы \n, но сокращение последних записей сокращает все, что находится перед первым \r\n, и условная логика (в зависимости от окончания) тоже не работает.
- Я подозреваю, что существует разница в том, как реализован Print::println() или как базовый UART HAL обрабатывает буфер передачи в ядре STM32.
- Я искал переопределения Serial.write(), которые могут автоматически конвертировать \n в \r\n, в то время как println также добавляет свои собственные.
Имеет ли ядро STM32 Arduino известную функцию «авто-CRLF» в своей реализации HardwareSerial, которая может конфликтовать со стандартной логикой Arduino.h? Как я могу обеспечить согласованность одного \r\n в обеих архитектурах?
Подробнее здесь: https://stackoverflow.com/questions/799 ... -vs-samd51