CH573-08-BLE蓝牙(通信与点灯)——RISC-V内核BLE MCU快速开发教程

在这里插入图片描述

1. BLE蓝牙通信

  1) 简介

   ch573芯片集成低功耗 2.4-GHz 无线通讯模块,包括 RF 收发器、基带和链路控制以及天线匹配网络,支持低功耗蓝牙 BLE。内部提供一百多个寄存器用于调节参数和控制过程及状态,官方优化的通讯协议栈和应用层 API,支持组网,支持各种主流操作系统下的上拉机开发,提供各 OS 下的 API 和 APP,具体信息参考官方ch573手册和大量的官方例程。

  2) 蓝牙串口例程测试

    a) 打开工程

        官方提供了几十个BLE例程供大家参考,这里以蓝牙串口为例,打开例程“BLE_UART”的工程文件:
在这里插入图片描述

    b) 打开peripheral_main.c文件

        在主函数中我们可以看到系统首先初始化了串口1:
在这里插入图片描述

        按住ctrl,然后左键单机app_uart_init();函数:


        可以看到在函数中初始化了串口3:
在这里插入图片描述

    记住上面两个串口以及对应的引脚,在接下来的APP调试中会用到:

    c) 编译

   打开工程后,点击项目,然后点击编译:


在这里插入图片描述

    d) 烧录运行

      烧录后,使用USB-TTL连接开发板的串口1,即 PA8(RXD1)\PA9(TXD1),打开串口助手,波特率115200,然后按下复位,系统会打印初始化完成
在这里插入图片描述

    e) 安装BLE调试助手

手机应用商店直接搜索“BLE调试助手”,可以看到有一款沁恒官方的APP,点击下载安装:
在这里插入图片描述

    f) 在应用中连接开发板

        打开上面下载的APP,点击连接,同时串口助手中也可以看到连接信息:

在这里插入图片描述

在这里插入图片描述

    g) 通信测试

        选择最后的“Unknow Service”,完成数据发送:
在这里插入图片描述

    在发送后可以看到模块发送了三字节同时接收到了三字节,在串口助手中也可以看到接收的数据大小:
在这里插入图片描述

    然后我们将USB-TTL连接开发板的串口1换成串口3,即 PA4(RXD3)\PA5(TXD3),然后再次重复上述的数据发送操作,系统可以显示接收的具体数据内容:
在这里插入图片描述

    然后我们切换到数据接收界面,关闭“hex”并打开“接收通知数据”在这里插入图片描述

    串口助手中点击发送(此时连接的是串口3):
在这里插入图片描述

    在数据接收界面可以收到数据:
在这里插入图片描述

    至此BLE数据收发测试完成,接下来我们依托这个数据收发的工程完成自己的应用开发.


2. BLE蓝牙点灯

  1) 新建工程

    为了避免改用引起的错误,首先复制粘贴原来的工程项目,并命名为“CH573F_08_BLE_UART”


  2) 蓝牙串口数据解析

      在上面的BLE蓝牙通信的使用中介绍到了蓝牙串口通过UART1打印日志调试信息,例如连接情况以及蓝牙串口接收数据的大小,并通过UART3完成蓝牙串口数据的收发,具体主要是体现在“peripheral.c”中的on_bleuartServiceEvt函数中,如下图所示:
在这里插入图片描述

      写一个数据处理函数:

void PERSON_BLE_UART_DATA_HANDLE(uint8_t *data, uint16_t length);

      在头部添加声明:
在这里插入图片描述

      在串口发送后的下方添加调用,并在下一函数实体中添加实现,例如将接收到的数据打印并根据接收的第一个字符控制LED的亮灭,如下图所示:

在这里插入图片描述

/******************************************************************
 * 功能:蓝牙串口数据处理函数
 * 参数:uint8_t *data,接收的数据; uint16_t length,接收的数据长度
 * 返回值:无
 ******************************************************************/
void PERSON_BLE_UART_DATA_HANDLE(uint8_t *data, uint16_t length)
{
    
    
    UART1_SendString(data,length);
    UART1_SendString("\r\n",2);
    PRINT("data[0]=%c",data[0]);
    if(data[0]=='1')
    {
    
    
        GPIOB_ModeCfg(GPIO_Pin_15, GPIO_ModeOut_PP_5mA);//推挽输出最大5mA
        GPIOB_ResetBits(GPIO_Pin_15);
        UART1_SendString("LED turn on\r\n",sizeof("LED turn on\r\n"));
    }
    else if(data[0]=='0'){
    
    
        GPIOB_ModeCfg(GPIO_Pin_15, GPIO_ModeOut_PP_5mA);//推挽输出最大5mA
        GPIOB_SetBits(GPIO_Pin_15);
        UART1_SendString("LED turn off\r\n",sizeof("LED turn off\r\n"));
    }
}

  3) 编译烧录运行

    烧录后,使用USB-TTL连接串口1引脚PA8(RXD1)\PA9(TXD1),打开串口助手,设置波特率115200,打开串口,然后按下复位键,等待APP连接后重复上一讲的数据发送,不同的是,发送的数据是单个字符“0”和“1”,如下所示:
在这里插入图片描述

    在串口助手中可以看到对应的处理结果:
在这里插入图片描述


    如果串口1和串口3的蓝牙数据收发状态如上图所示,即达到本实验的目的,如果异常,请检查源代码,如有疑问可关注公众号 “IOT趣制作”,将您遇到的问题描述出来,平台收到您的留言后会第一时间进行解决。
    至此CH573快速入门-基础篇的教程到此结束,下一章节开始进入【第三章 进阶开发篇】,将结合多个传感器、执行器以及Android Studio的自定义蓝牙APP等多个内容进行详细讲解。

猜你喜欢

转载自blog.csdn.net/weixin_43351158/article/details/131142349
今日推荐