Arduino 软件串口
除了 HardwareSerial 类库,Arduino 还提供了 SoftwareSerial 类库,可将其他数字引脚通过程序来模拟成串口通信引脚(简称软串口)。
软串口给硬件受限的 Arduino 控制板提供了灵活的扩展能力,比如 Arduino UNO 及其他以 ATmega 328 为主控制器的 Arduino 硬件,只有 0 (RX) 和 1 (TX) 一组硬件串口,而这组串口又经常用于与计算机进行通信,如果使用这组硬件串口连接外部设备,会导致无法向 Arduino 下载程序,以及打印调试信息。因此,如果此时还需要连接其他串口设备,那么可以使用软件模拟串口来达到目的。
软串口的局限性
软串口是由软件模拟生成的,使用起来不如硬件串口稳定,并且受限于系统性能,波特率不宜设置太高。
软件串口通过 AVR 芯片的 PCINT 中断功能来实现,在 Arduino UNO 上,所有引脚都支持 PCINT 中断,因此所有引脚都可以设置为软串口的 RX 接收端。但在其他型号的 Arduino 上,并不是每个引脚都支持中断功能,所以只有特定的引脚可以设置为 RX 端。
- 在 Arduino MEGA 上能够被设置为 RX 的引脚有:10、11、12、13、50、51、52、53、62、63、64、65、66、67、68、69。
- 在 Arduino Leonardo 上能够被设置为 RX 的引脚有:8、9、10、11、14(MISO)、15(SCK)、16(MOSI)。