RP2040串口不发送数据(DTR)
#include <Arduino.h> void setup() { // put your setup code here, to run once: Serial.begin(115200); } void loop() { // put your main code here, to run repeatedly: Serial.println("Hello im from RP2040"); sleep_ms(1000); }
RP2040基于USBserial其实是改不了波特率的
Arduino-Pico 核心使用 USB ACM-CDC 模型实现基于软件的串行 USB 端口,以支持各种各样的操作系统。 Serial是 USB 串行端口,虽然Serial.begin()允许指定波特率,但由于它是基于 USB 的,因此会忽略该速率。(还请注意,此 USBSerial端口负责在上传过程中重置 RP2040,遵循 Arduino 标准 1200bps = 重置为引导加载程序)。 RP2040 提供两个基于硬件的 UART,具有可配置引脚选择。 Serial1是UART0,且Serial2是UART1。
在我翻了无数个英文帖子后,终于有人说了,这个串口需要DTR=1才能输出……说实话,我第一次见这样的串口……
我打开C#,插入一个串口控件,看属性:

有个DtrEnable
void Btn_OpenClick(object sender, EventArgs e) { if (!serialPort1.IsOpen) { label1.Text+="Port not opened try open!\n"; serialPort1.Open(); if (serialPort1.IsOpen) label1.Text+="Port is opened!\n"; else label1.Text+="Port is open failure!\n"; } else { label1.Text+="Port already opened try to close\n"; serialPort1.Close(); label1.Text+="Port closed\n"; } } void Check_dtrClick(object sender, EventArgs e) { serialPort1.DtrEnable=!serialPort1.DtrEnable; if (serialPort1.DtrEnable) label1.Text+="DTR Enabled\n"; else label1.Text+="DTR Disabled\n"; } void Timer1Tick(object sender, EventArgs e) { if (serialPort1.IsOpen) { if(serialPort1.BytesToRead>0) { label1.Text+=serialPort1.ReadLine(); } } }
串口调试

有DTR enable才有串口数据
RP2040 特定的 SerialUSB 方法 void Serial.ignoreFlowControl(bool 忽略) 在某些情况下,目标应用程序不会断言 DTR 虚拟线,从而阻止写入操作成功。 因此,SerialUSB::ignoreFlowControl() 方法禁用连接的状态验证,使得程序能够在端口上写入,即使数据可能丢失。 貌似PlatfromIO带的Arduino-Core貌似比较旧,没这个函数。
浙公网安备 33010602011771号