Arduino Uno自带一个串口,也就是管脚1、2,“硬串口”,IDE upload代码、使用串口监视器调试程序,用到的都是这个串口,那么,如果你还需要用串口连接其他设备时,应该怎么办呢?
为了不应现调试程序,这里需要用到“软串口”,也就是将其他数字管脚当成串口使用~~の,难道要按TTL串口协议解析串口数据不成?
到是没有这么复杂,Arduino已经自带SoftwareSerial库,完成了对串口逻辑的封装。以下代码是串口读取VAMLED电压模块的逻辑,咱们以此为例来看看软串口是怎么用的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <SoftwareSerial.h> SoftwareSerial EVSerial(2, 3); //定义软串口管脚,分别是rx tx void setup (){ EVSerial.begin(9600); //波特率 Serial.begin(9600); } void loop() { if(EVSerial.available() > 0){ Serial.print(">> "); Serial.println(EVSerial.readString());//在串口监视器,打印电压模块传递的电压值 delay(1000); //每读取一次,延时 EVSerial.print(0); //向VAMLED模块发送“上报电压”指令 } } |
以上逻辑,即包含了SoftwareSerial读取和写入的操作,不过实际使用有两个问题:
1. 每模拟一个软串口都要消耗单片机的资源,内存和flash、堆栈等。软串口和硬串口对于发送数据是一样的,但在接收数据时,性能就有差别了,硬串口是支持中断接收数据的,不会影响程序运行的实时性,但是软串口不支持中断,接收串口数据你得去不断轮询,收到的数据还有可能会丢掉
2. 具体到上面这个例子,实际收到的电压值包含乱码,不好解析,具体原因正在研究,等有结果了再更新o(* ̄︶ ̄*)o
———-
转载请注明出处:http://www.jiangkl.com/2022/10/arduino_serial/