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貌似比较旧,没这个函数。

 

posted @ 2025-01-14 09:54  mcwhirr  阅读(113)  评论(0)    收藏  举报