合宙esp32c3开发板多软串口及GPIO测试

合宙esp32c3开发板共引出GPIO口如下:GPIO0~13,GPIO18~21

并有如下提示:

使用注意事项

  1. BOOT(IO09)管脚上电前不能下拉,ESP32会进入下载模式。

  2. 使用到IO08管脚进行设计,不建议外部直接下拉,因为在下载烧录时,IO08管脚为低电平,不能使用串口进行下载。

  3. IO12(GPIO12)、IO13(GPIO13)在QIO模式下为SPI信号SPIHD和SPIWP复用,为了增加可用GPIO数量,开发板选择采用2线SPI的DIO模式,IO12、IO13并未连接flash,使用自己编译的软件时需要注意配置flash为DIO模式。

  4. 外置SPI flash的VDD已链接至3.3V电源系统,使用时不需再配置其他电源,采用普通2线SPI通信方式,对应管脚如表4-3。

  5. GPIO11默认为SPI flash的VDD引脚,需要配置后才能作为GPIO使用。

 

由于有一应用需要5个串口,而esp23c3本身只有2个硬件串口,并且一硬串口用于调试,故须用SoftwareSerial库再建4个软串口。然后将剩余GPIO做了简单测试。

根据SoftwareSerial库,esp23c3的有效pin如下:return (pin >= 0 && pin <= 1) || (pin >= 3 && pin <= 7) || (pin >= 18 && pin <= 21); 共九个,每个软串口用2pin,故建4个软串口也就是极限了。

测试程序:

  1 #include <SoftwareSerial.h>
  2 SoftwareSerial uart1(4,5);//RX=d5,TX=d6
  3 SoftwareSerial uart2(6,7);//RX=d7,TX=d8
  4 SoftwareSerial uart3(18,19);//RX=d7,TX=d8
  5 SoftwareSerial uart4(0,1);//RX=d7,TX=d8
  6 String UART_String="";
  7 String UART2_String="";
  8 String UART3_String="";
  9 String UART4_String="";
 10 void setup() {
 11   Serial.begin(38400);
 12   uart1.begin(38400);
 13   uart2.begin(38400);
 14   Serial.print("k1 uart1.isListening():");
 15   Serial.println(uart1.isListening());
 16   Serial.print("k1 uart2.isListening():");
 17   Serial.println(uart2.isListening());
 18   Serial.print("k1 uart3.isListening():");
 19   Serial.println(uart4.isListening());
 20   Serial.print("k1 uart3.isListening():");
 21   Serial.println(uart4.isListening());
 22   uart3.begin(38400);
 23   uart4.begin(38400);
 24   Serial.print("k2 uart1.isListening():");
 25   Serial.println(uart1.isListening());
 26   Serial.print("k2 uart2.isListening():");
 27   Serial.println(uart2.isListening());
 28   Serial.print("k2 uart3.isListening():");
 29   Serial.println(uart3.isListening());
 30   Serial.print("k2 uart4.isListening():");
 31   Serial.println(uart4.isListening());
 32   pinMode(9, OUTPUT);
 33   pinMode(10, OUTPUT);
 34   pinMode(8, OUTPUT);    
 35 //  pinMode(11, OUTPUT);    //11一直高,不能做io用
 36   pinMode(12, INPUT_PULLUP);
 37   pinMode(13, INPUT_PULLUP);
 38 
 39  /* 
 40   uart1.listen();
 41   Serial.print("1 uart1.isListening():");
 42   Serial.println(uart1.isListening());
 43   Serial.print("1 uart2.isListening():");
 44   Serial.println(uart2.isListening());
 45 //uart2.listen();
 46   //uart1.begin(9600);
 47   Serial.print("2 uart1.isListening():");
 48   Serial.println(uart1.isListening());
 49   Serial.print("2 uart2.isListening():");
 50   Serial.println(uart2.isListening());
 51   */
 52 }
 53 void loop() {
 54   if(Serial.available()>0)
 55   { 
 56     char ch=Serial.read();
 57    uart1.print(ch );//读取电脑发送的数据,并通过软串口1发送
 58    uart2.print(ch );//读取电脑发送的数据,并通过软串口2发送
 59    uart3.print(ch );//读取电脑发送的数据,并通过软串口3发送
 60    uart4.print(ch );//读取电脑发送的数据,并通过软串口4发送
 61   }
 62   if(uart4.available()>0)
 63   {
 64     if(uart4.peek()!='\n')//在收到换行符前软串口接受数据并链接为字符串
 65     {
 66       UART4_String+=(char)uart4.read();
 67     }
 68     else
 69     {
 70       uart4.read();
 71       Serial.print("0/1UART4 data:");
 72       Serial.println(UART4_String);//将软串口4接受的数据打印输出至电脑
 73       UART4_String="";
 74     }
 75   }
 76   if(uart3.available()>0)
 77   {
 78     if(uart3.peek()!='\n')//在收到换行符前软串口接受数据并链接为字符串
 79     {
 80       UART3_String+=(char)uart3.read();
 81     }
 82     else
 83     {
 84       uart3.read();
 85       Serial.print("18/19UART3 data:");
 86       Serial.println(UART3_String);//将软串口3接受的数据打印输出至电脑
 87       UART3_String="";
 88     }
 89   }
 90   if(uart2.available()>0)
 91   {
 92     if(uart2.peek()!='\n')//在收到换行符前软串口接受数据并链接为字符串
 93     {
 94       UART2_String+=(char)uart2.read();
 95     }
 96     else
 97     {
 98       uart2.read();
 99       Serial.print("6/7UART2 data:");
100       Serial.println(UART2_String);//将软串口2接受的数据打印输出至电脑
101       UART2_String="";
102     }
103   }
104   if(uart1.available()>0)
105   {
106     if(uart1.peek()!='\n')//在收到换行符前软串口接受数据并链接为字符串
107     {
108       UART_String+=(char)uart1.read();
109     }
110     else
111     {
112       uart1.read();
113       Serial.print("4/5UART1 data:");
114       Serial.println(UART_String);//将软串口1接受的数据打印输出至电脑
115       UART_String="";
116     }
117   }
118   digitalWrite(9,digitalRead(12));
119   digitalWrite(8,digitalRead(12)||digitalRead(13));
120   digitalWrite(10,digitalRead(13));
121 }

测试结果:

k1 uart1.isListening():1
16:16:42.125 -> k1 uart2.isListening():1
16:16:42.125 -> k1 uart3.isListening():0
16:16:42.159 -> k1 uart3.isListening():0
16:16:42.159 -> k2 uart1.isListening():1
16:16:42.159 -> k2 uart2.isListening():1
16:16:42.159 -> k2 uart3.isListening():1
16:16:42.159 -> k2 uart4.isListening():1
16:19:16.611 -> 0/1UART4 data:config,set,reboot4
16:20:36.425 -> 4/5UART1 data:config,set,reboot1
16:22:23.313 -> 6/7UART2 data:config,set,reboot1
16:25:28.891 -> 18/19UART3 data:config,set,reboot3

[16:19:07.969]收←◆sdsdasasdf01

[16:19:16.586]发→◇config,set,reboot4

[16:20:26.745]收←◆dfhynjgf45

[16:20:36.409]发→◇config,set,reboot1

[16:22:15.097]收←◆zxddfdf67

[16:22:23.282]发→◇config,set,reboot1

[16:25:05.789]收←◆SoftwareSerial uart3(18,19)

[16:25:28.857]发→◇config,set,reboot3

4个软串口工作正常,另外GPIO11始终为高,不受控。

posted @ 2023-05-14 17:24  chengwh  阅读(3064)  评论(0编辑  收藏  举报