本帖最后由 jinglixixi 于 2021-9-6 10:03 编辑
串行通讯是Wio终端的重要功能之一,其既可用于显示调试信息,也可实现设备间的数据传送。 在Wio终端有2个串口可供数据传送之用,即Serial1和Serial2。 2个串口的引脚定义为: Serial1: #define PIN_SERIAL1_RX(40ul) #define PIN_SERIAL1_TX(41ul) Serial2: #define PIN_SERIAL2_RX(83ul) #define PIN_SERIAL2_TX(82ul)
通过图1所示的扩展接口,可外挂USB转TTL通讯模块来进行外设间的数据通讯。
图1 通讯扩展接口
在通常情况下,我们是使用Serial.println()函数来输出字符串信息,那该如何来发送字节数据呢? 方法是使用Serial.write()函数,且可以使用Serial.read()函数来接收字节数据。 下面的程序功能是启动2个串口进行通讯,其波特率均为9600bps,当Serial1读到字节数据时就原样发送出去,而在Serial读到字节数据时,也同样原样发送。 双串口字节数据收发程序: - void setup() {
- Serial.begin(9600);
- Serial1.begin(9600);
- }
- void loop() {
- if (Serial1.available()) {
- int inByte = Serial1.read();
- Serial1.write(inByte);
- }
- if (Serial.available()) {
- int inByte = Serial.read();
- Serial.write(inByte);
- }
- }
复制代码
经程序的编译与上传,其运行结果如图2和图3所示。
图2调试串口收发数据
图3 扩展串口收发数据
此外,还可以通过编程来实现串口间的数据交叉传送,其程序如下: - void loop() {
- if (Serial1.available()) {
- int inByte = Serial1.read();
- Serial1.write(inByte);
- Serial.write(inByte);
- }
- if (Serial.available()) {
- int inByte = Serial.read();
- Serial.write(inByte);
- Serial1.write(inByte);
- }
- }
复制代码
经程序的编译和上传,当在Wio终端发送“123”时,会在接收后转发到外挂的扩展串口而显示“123”;同样在扩展串口发送“ABC”,也会在Wio终端上接收并显示出“ABC”,其效果见图4和图5所示。
图4 Wio终端数据收发
图5 扩展串口数据收发
此外,使用串口收发字节数据的应用是控制MP3播放模块。 该MP3播放模块的功能是读取TF卡中的MP3音频文件进行播放,并通过串行指令来控制,其引脚分布如图6所示。在使用时只用到5个引脚,即2个电源引脚,2个连接扬声器引脚SPK1和SPK2,及连接Wio终端TXD引脚的RX引脚。
图6 MP3播放模块引脚排列
若将播放指令存于数组cmd3中,且其格式为: unsignedchar cmd3[10] = {0X7E, 0xFF, 0x06, 0X03, 0x00, 0x00, 0x01, 0xFE, 0xF7, 0XEF}; 则控制MP3模块播放的函数为: - void play () {
- char i;
- for(i=0;i<10;i++)
- {
- Serial.write(cmd3);
- }
- }
复制代码
|