AT32WB415 AN0077增加可获取蓝牙MAC地址的AT指令

前言

雅特力AT32WB415是一颗集成了蓝牙模组的MCU,支持蓝牙5.0,包括支持拓展数据包,在保证数据传输效率的同时,又能满足对算法和外设资源有要求的应用,雅特力官网有支持AT指令同时也可支持大数据传输的sample code ,作为一份纯粹的参考代码还是有意义的。
雅特力官网下载连接 :

下面将介绍怎么新增自定义的AT指令,以及怎么获取蓝牙MAC地址

示例教程

1、在用户AT指令定义的枚举  at_cmd_tag 中新增一条指令名称,名称可自定义,例如博主使用的  AT_RESULT_BLE_MAC 
enum at_cmd_tag
{
    AT_RESULT_AT, // 0
    AT_RESULT_BAUD1,
    AT_RESULT_BAUD2,
    AT_RESULT_BAUD3,

……

    AT_RESULT_TPMODE0,
    AT_RESULT_TPMODE1,
    AT_RESULT_BLE_MAC,
    AT_RESULT_MAX,
};
2、然后在AT指令集的结构体  at_prefix_req 中编辑新增的指令对应的指令内容, 例如博主使用的 “ AT+BLEMAC \r\n” 
static const at_prefix_t at_prefix_req[] = {
    DECLARE_PREFIX("AT\r\n", AT_RESULT_AT),


    DECLARE_PREFIX("AT+BAUDS1\r\n", AT_RESULT_BAUDS1),
    DECLARE_PREFIX("AT+BAUDS2\r\n", AT_RESULT_BAUDS2),
    DECLARE_PREFIX("AT+BAUDS3\r\n", AT_RESULT_BAUDS3),

……

    DECLARE_PREFIX("AT+TPMODE0\r\n", AT_RESULT_TPMODE0),
    DECLARE_PREFIX("AT+TPMODE1\r\n", AT_RESULT_TPMODE1),
    DECLARE_PREFIX("AT+BLEMAC\r\n", AT_RESULT_BLE_MAC),
   
};
3、在 app.c 中添加头文件 “ #include "co_utils.h"”,因为无论是软件MAC或flash中的MAC,最终MAC地址是会缓存在  co_default_bdaddr 中, co_default_bdaddr 的外部定义是放在  "co_utils.h" 中。
4、 在AT指令处理函数  app_user_entry  中新增 AT_RESULT_BLE_MAC  的处理代码,将MAC复制到临时数组并通过串口回复给 MCU 
case AT_RESULT_BLE_MAC:
                    cpu_delay(15);
                    char buffer_A[6] = {0};
                    strncpy(buffer_A, (char *)&co_default_bdaddr.addr, 6);
                    UART_SEND_DATA("%s\r\n", buffer_A);
                    break;
5、番外:
修改蓝牙名称的指令无法生效,增加广播关闭和打开的处理。
                    if (ke_state_get(TASK_APP) == APPM_ADVERTISING)
                    {
                        appm_stop_advertising();
                    }
                case AT_RESULT_NAME:
                case AT_RESULT_NAMES:
                    cpu_delay(15);
                    memset(Sram_Device_name, 0, 20);
                    memcpy(APP_DFLT_DEVICE_NAME, AT_cmd_buf + prefix_cmd->prefix_len, (AT_cmd_len - prefix_cmd->prefix_len));
                    appm_set_dev_name(APP_DFLT_DEVICE_NAME, (AT_cmd_len - prefix_cmd->prefix_len));
                    AT_cmd_len = 0;

                    if (prefix_cmd->code == AT_RESULT_NAME)
                    {
                        save_parameter_to_BK3432_USED_FLASH_AREA(TAG_NAME, (uint8_t *)APP_DFLT_DEVICE_NAME);
                    }
                    {
                        char buffer_A[64] = {0};

#ifdef used_BK3432_MCU
                        UART_SEND_DATA("@");
#endif
                        UART_SEND_DATA("%s", get_at_rsp(rsp_code));
                        strncpy(buffer_A, (char *)(AT_cmd_buf + prefix_cmd->prefix_len), (without_prefix_len - 2));
                        UART_SEND_DATA("%s\r\n", buffer_A);
                    }
                    if (ke_state_get(TASK_APP) == APPM_ADVERTISING)
                    {
                        appm_stop_advertising();
                    }
                    UART_PRINTF("name : %s\r\n",APP_DFLT_DEVICE_NAME);
                    break;

结语

欢迎大家指正讨论。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑色HS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值