STM32---蓝牙模块ECB02(主机模式_两模块间通信)


相关链接:STM32---蓝牙模块ECB02(从机模式_与手机通信)

上篇ECB02笔记,已经整理:模块参数、AT指令、使用要点等。

本文,省略重复描述,重点整理ECB02配置主机模式,示例两模块一主一从通信。

目录

1、ECB02 主机模式 重点

2、主机模式 需要的AT指令

3、STM32 接线

4、主机模式 配置代码

5、通信效果


1、ECB02 主机模式 重点

  • 无需、不能设置蓝牙名称;
  • 上电后,会根据保存的绑定记录,自动搜索、连接从机设备;
  • 连接新的设备前,要先清除旧的绑定记录;
  • 3种绑定从机的方式:蓝牙名称、MAC地址、设备的设备号(不建议使用);
  • 设定绑定参数后,如绑定名称,就会自动开始搜索、连接(无需干预);
  • 可以通过指令,灵活设置搜索从机的间隔、搜索的时长;

2、主机模式 需要的AT指令

下列是配置的重要指令,其它配置使用默认参数即可。

  • AT+FACTORY\r\n  ;                         // 恢复出厂设置,         返回:“OK\r\n” 
  • AT+ROLE=1\r\n ;                             // 设置主机模式,         返回:“OK\r\n”
  • AT+BONDC\r\n ;                              // 清除旧的从机绑定,  返回:“OK\r\n”
  • AT+MODE=1\r\n ;                            // 连接后AT指令有效, 返回:“OK\r\n”
  • AT+BONDNAME=myECB02\r\n ;    // 绑定从机蓝牙设备,  返回:“OK\r\n”

3、STM32 接线

两个ECB02,分别在两块STM32板上,使用相同的UART端口、接线。

本文引脚连接,如下表:

蓝牙 ECB02 模块STM32 开发板
RXDTX-PC10  (UART4)
TXDRX-PC11    (UART4)
GNDGND
VCC3.3V 


4、主机模式 配置代码

/******************************************************************************
 * 函  数: UART4_WaitACK
 * 功  能: 等待指令返回值 *
 * 参  数: char*    _ackStr   期待返回的字符串
 *          uint32_t _timeout  超时值
 * 返回值: 0-超时、返回异常
 *          1-正常返回期待值
 ******************************************************************************/
static uint8_t UART4_WaitACK(char *_ackStr, uint32_t _timeout)
{
    while (_timeout--)                                                             // 判断是否起时(这里只作简单的循环判断次数处理)
    {
        if (xUART4.ReceivedNum)                                                    // 判断是否接收到数据
        {
            xUART4.ReceivedNum = 0;                                                // 清0接收字节数
            if (strstr((char *)xUART4.ReceivedData, _ackStr))                      // 判断返回数据中是否有期待的字符
                return 1;                                                          // 返回:0-超时没有返回、1-正常返回期待值
            else
                return 0;
        }
        delay_ms(1);                                                                   // 延时; 用于超时退出处理,避免死等
    }
    return 0;                                                                      // 返回:0-超时、返回异常,1-正常返回期待值
}



/******************************************************************************
 * 函  数: ECB02_Init
 * 功  能: 初始化ECB02:主机模式
 *          配置串口、主从机模式、AT模式、蓝牙名称
 * 参  数: 无
 * 返回值: 0-失败、1-成功
 ******************************************************************************/
static uint8_t ECB02_Init(void)
{
    delay_ms(200);                                          // 上电后稍作延时,等待ECB02进入工作状态

    UART4_Init(115200);                                     // 串口4初始化; 用于与ECB02通信; 波特率115200; 使用引脚PC10、PC11

    /** 1-恢复出厂设置**/
    UART4_SendString("AT+FACTORY\r\n");                     // 恢复出厂时的默认配置
    if (UART4_WaitACK("OK", 1000) == 0)                     // 等待指令执行返回; AT指令执行成功返回"OK"、执行失败不返回任何数据;
        goto error_ECB02_Init;                              // 错误:等待超时; 跳到错误处理
    printf("1- ECB02 默认配置     配置完成\r");              // 输出提示:修改成功
    delay_ms(500);                                          // 注意:执行恢复出厂配置指令后,要稍等500ms后,才能操作其它指令

    /** 2-主机模式 **/
    UART4_SendString("AT+ROLE=1\r\n");                      // 设置主从机模式:0-由ROLE引脚配置、1-主机模式、2-从机模式
    if (UART4_WaitACK("OK", 1000) == 0)                     // 等待指令执行返回; AT指令执行成功返回"OK"、执行失败不返回任何数据;
        goto error_ECB02_Init;                              // 错误:等待超时; 跳到错误处理
    printf("2- ECB02 主机模式     配置完成\r");              // 输出提示:修改成功
    delay_ms(500);                                          // 注意:执行主从机模式指令后,要稍等500ms后,才能操作其它指令

    /** 3-连接后AT指令仍然有效 **/
    UART4_SendString("AT+MODE=1\r\n");                      // 设置连接后仍可使用AT指令; 0-AT_EN引脚控制、1-连接后AT指令有效、2-连接后AT指令无效,所有数据数据透传;
    if (UART4_WaitACK("OK", 1000) == 0)                     // 等待指令执行返回; AT指令执行成功返回"OK"、执行失败不返回任何数据;
        goto error_ECB02_Init;                              // 错误:等待超时; 跳到错误处理
    printf("3- ECB02 AT模式       配置完成\r");              // 输出提示:修改成功

    /** 4-清除旧的绑定 **/
    UART4_SendString("AT+BONDC\r\n");                       // 清除旧的绑定记录:如果最后一次连接的是设备A,那么,在连接设备B前,要清除旧的绑定记录
    if (UART4_WaitACK("OK", 1000) == 0)                     // 等待指令执行返回; AT指令执行成功返回"OK"、执行失败不返回任何数据;
        goto error_ECB02_Init;                              // 错误:等待超时; 跳到错误处理
    printf("4- ECB02 清除绑定     配置完成\r");              // 输出提示:修改成功
    delay_ms(500);                                          // 注意:执行清除旧绑定记录指令后,要稍等500ms后,才能操作其它指令

    /** 5-连接指定设备 **/
    UART4_SendString("AT+BONDNAME=myECB02\r\n");            // 设置要绑定的从机设备名称,在设置后,ECB02会开始自动搜索,并尝试连接设备; 注意:如果是汉字的名称,要使用URL编码,具体可翻查官方pdf
    if (UART4_WaitACK("OK", 1000) == 0)                     // 等待指令执行返回; AT指令执行成功返回"OK"、执行失败不返回任何数据;
        goto error_ECB02_Init;                              // 错误:等待超时; 跳到错误处理
    printf("4- ECB02 连接设备...\r\n");                      // 输出提示:尝试连接设备

    return 1;                                               // 配置顺利完成,函数返回:1

error_ECB02_Init:                                           // 失败处理
    printf("ECB-02 配置失败!已跳过配置\r");                  // 输出提示:配置失败
    return 0;                                               // 返回:0-失败、1-成功
}

5、通信效果

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值