合宙esp32c3开发板多软串口及GPIO测试
合宙esp32c3开发板共引出GPIO口如下:GPIO0~13,GPIO18~21
并有如下提示:
使用注意事项
-
BOOT(IO09)管脚上电前不能下拉,ESP32会进入下载模式。
-
使用到IO08管脚进行设计,不建议外部直接下拉,因为在下载烧录时,IO08管脚为低电平,不能使用串口进行下载。
-
IO12(GPIO12)、IO13(GPIO13)在QIO模式下为SPI信号SPIHD和SPIWP复用,为了增加可用GPIO数量,开发板选择采用2线SPI的DIO模式,IO12、IO13并未连接flash,使用自己编译的软件时需要注意配置flash为DIO模式。
-
外置SPI flash的VDD已链接至3.3V电源系统,使用时不需再配置其他电源,采用普通2线SPI通信方式,对应管脚如表4-3。
-
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始终为高,不受控。