回答

收藏

[评测分享] [Wio Terminal开发板测评]+ 串行通讯及应用

#板卡评测 #板卡评测 4513 人阅读 | 0 人回复 | 2021-09-06

本帖最后由 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读到字节数据时,也同样原样发送。
双串口字节数据收发程序:
  1. void setup() {
  2.   Serial.begin(9600);
  3.   Serial1.begin(9600);
  4. }
  5. void loop() {
  6.   if (Serial1.available()) {
  7.     int inByte = Serial1.read();
  8.     Serial1.write(inByte);
  9.   }
  10. if (Serial.available()) {
  11.     int inByte = Serial.read();
  12.     Serial.write(inByte);
  13.   }
  14. }
复制代码

经程序的编译与上传,其运行结果如图2和图3所示。

图2调试串口收发数据

图3 扩展串口收发数据

此外,还可以通过编程来实现串口间的数据交叉传送,其程序如下:
  1. void loop() {
  2.   if (Serial1.available()) {
  3.     int inByte = Serial1.read();
  4.     Serial1.write(inByte);
  5.     Serial.write(inByte);
  6.   }
  7.   if (Serial.available()) {
  8.     int inByte = Serial.read();
  9.     Serial.write(inByte);
  10.     Serial1.write(inByte);
  11.   }
  12. }
复制代码


经程序的编译和上传,当在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模块播放的函数为:
  1. void play () {
  2.   char i;
  3.   for(i=0;i<10;i++)
  4.   {
  5.       Serial.write(cmd3);
  6.   }
  7. }
复制代码

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条