Arduino for esp8266串口功能简介

Arduino for esp8266串口功能简介


  • 参考资料:https://arduino-esp8266.readthedocs.io/en/latest/reference.html#
    Arduino for esp8266串口功能简介_第1张图片

串口说明

该对象的工作方式与常规Arduino的工作方式大致相同。除了硬件FIFO(TX和RX为128字节)之外,还有一个额外的可定制的256字节RX缓冲区。此软件缓冲区的大小可由用户更改。建议在更高的接收速度下使用更大的容量。NodeMcu上有两组串口,SerialSerial1Serial使用UART0,默认对应引脚是GPIO1(TX–D10)和GPIO3(RX–D9)

  • 该方法根据需要更改 RX 缓冲区大小。这应该在 之前调用。size 参数应至少足够大,以便在读取之前保存收到的所有数据。::setRxBufferSize(size_t size)::begin()
  • 对于仅传输操作,可以通过将模式SERIAL_TX_ONLY传递给 Serial.begin() 来关闭 256 字节 RX 缓冲区以节省 RAM。其他模式SERIAL_RX_ONLYSERIAL_FULL(默认值)

不同模式设置

  • Serial.begin(115200);//常规串口设置

  • Serial.begin(115200, SERIAL_8N1); //同上

  • Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY);//仅开启串口输出

  • Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY, 1); // void begin(unsigned long baud, SerialConfig config, SerialMode mode, uint8_t tx_pin);//仅开启串口输出,并指定引脚

  • Serial.begin(115200, SERIAL_8N1, SERIAL_RX_ONLY);//仅开启串口输入模式,无法串口打印输出信息

  • Serial.begin(115200, SERIAL_8N1, SERIAL_FULL);//默认模式

接收是中断驱动的,但传输轮询和忙等待。阻止行为如下:如果字节数适合 TX FIFO 中的当前可用空间,则调用不会阻塞。如果 TX FIFO 已满,则调用会阻塞,并等到有空间后再向其中写入更多字节,直到写入所有字节。换句话说,当调用返回时,所有字节都已写入 TX FIFO,但这并不意味着所有字节都已通过串行线路发送出去。调用不会阻塞,即使没有可用于读取的字节也是如此。调用将阻塞,直到读取的字节数符合传入参数所需的字节数。在返回之前,等待 TX FIFO 为空的调用块。建议在对串行端口进行配置更改(例如更改波特率)或执行电路板复位之前调用此操作,以确保已发送所有字节。相关函数:::write()::read()::readBytes()::flush()

  • Serial使用 UART0,它映射到引脚 GPIO1 (TX)GPIO3 (RX)。串行可以通过在之后调用 重新映射到 GPIO15 (TX)GPIO13 (RX)。再次调用会将 UART0 映射回 GPIO1GPIO3。Serial.swap();

示例代码

void setup() { 
Serial.begin(115200);
Serial.println("GPIO1(TX),GPIO3(RX)");
Serial.swap();//调用映射
Serial.println("GPIO15(TX1),GPIO13(RX1)");
Serial.swap();//再次调用映射,将变回原来的默认映射引脚
Serial.println("GPIO1(TX),GPIO3(RX)");
 }
 void loop() { 
 }
  • Serial1使用UART1,默认对应引脚是GPIO2(TX----D4)。Serial1不能用于接收数据,因为它的RX引脚被用于flash芯片连接—D3。
  • 默认情况下调用Serial.begin,Wifi库诊断输出是禁用的。再次启动调试输出,调用Serial.setDebugOutput(true)
  • 原函数
void HardwareSerial::setDebugOutput(bool en)
{
    if(!_uart) {
        return;
    }
    if(en) {
        if(uart_tx_enabled(_uart)) {
            uart_set_debug(_uart_nr);
        } else {
            uart_set_debug(UART_NO);
        }
    } else {
        // disable debug for this interface
        if(uart_get_debug() == _uart_nr) {
            uart_set_debug(UART_NO);
        }
    }
}
  • printf串口调试输出函数说明,在VSCode PIO里面调用,经测试能串口打印输出信息,但是在Arduino IDE编译环境下编译烧录进去就不能打印,需要Serial.printf才行。
#include 
void setup()
{
    Serial.begin(115200);
   Serial.setDebugOutput(true);  //将串口设为调试输出模式
  // Serial.setDebugOutput(false);
}
void loop()
{
   // Serial.println("Hello");
   printf("Hello\n");
   //Serial.printf("Hello\n");//这个都支持
    for(int i=0; i<5000; i++)
    {
        delayMicroseconds(1000);
        yield();
    }
}

获取串口波特率

void setup() { 
Serial.begin(57600);
int br = Serial.baudRate();  //获取当前波特率
Serial.printf("当前波特率是 %d bps\n", br);
 }
void loop() { 

 }

  位卑未敢忘忧国, 事定犹须待盖棺。 —— 陆 游《病起》

你可能感兴趣的:(串口)