查看: 3321|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2021-9-6 10:02:16 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 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.jpg
    图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.jpg
    图2调试串口收发数据

    3.jpg
    图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.jpg
    图4  Wio终端数据收发

    5.jpg
    图5 扩展串口数据收发

    此外,使用串口收发字节数据的应用是控制MP3播放模块。
    该MP3播放模块的功能是读取TF卡中的MP3音频文件进行播放,并通过串行指令来控制,其引脚分布如图6所示。在使用时只用到5个引脚,即2个电源引脚,2个连接扬声器引脚SPK1和SPK2,及连接Wio终端TXD引脚的RX引脚。

    6.jpg
    图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. }
    复制代码

    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 12:26 , Processed in 0.117242 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.