Monthly Archives: 十月 2022

Hello World

Arduino软串口的使用

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/