0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于CW32L083的AT指令框架

华仔的编程随笔 ? 来源:华仔的编程随笔 ? 作者:华仔的编程随笔 ? 2023-07-13 08:57 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

产品很多配置信息需要后期进行配置,配置交互最好的方式之一是上位机通过串口与开发板进行交互来完配置。这里我准备引入AT指令来进行配置。

我采用串口中断+定时器中断来实现了串口的接收,下面进行AT指令框架的创建。

  1. 首先定义了指令结构:
typedef enum{
    AT_CMD_TEST = 0,
    AT_CMD_SETRTC,
    AT_END
}AT_Cmd;

typedef unsigned char (*pFunc)(unsigned char *ptr, unsigned char len);

typedef struct
{
    AT_Cmd cmd;             /* 指令序号 */
    unsigned char *str;     /* 指令内容 */
    pFunc cb;               /* 指令执行 */
}AT_cmd_func;

/* AT指令表 */
const AT_cmd_func at_cmd_func[] = {
    {AT_CMD_TEST,       "AT",           at_cmd_test},
    {AT_CMD_SETRTC,     "AT+SETRTC=",   at_cmd_setrtc},
    {AT_END,        NULL,           NULL}
};
  1. 我定义了执行指令的函数1个是AT测试,再有一条是设置RTC的指令(具体还没有实现,只是定义了一条打印指令);
/* 指令执行函数 */
unsigned char at_cmd_test(unsigned char *p, unsigned char len){
    AT_DEBUG_INFO("AT+OKrn");
    return 0;
}

unsigned char at_cmd_setrtc(unsigned char *p, unsigned char len){
    AT_DEBUG_INFO("setrtcrn");
    return 0;
}
  1. 最后我们进行指令解析,主要有两个函数,一个是检索指令表里是否存在指令,二个是解析指令,如果成果测执行相应的指令。
/* 查找指令表中对应的指令 */
unsigned char AT_cmd_search(unsigned char *p, unsigned char len)
{
    unsigned char ret = 0;
    unsigned char *pstr;
    unsigned char i, n;
    for(i=1; at_cmd_func[i].cmd != AT_END; i++)
    {
        n = mstrlen(at_cmd_func[i].str);
        if(!mstrncmp(p, at_cmd_func[i].str, n)){
            ret = i;
            break;
        }
    }
    return ret;
}

/* AT指令解析 */
unsigned char at_cmd_parse(unsigned char *p, unsigned char len){
    unsigned char ret = AT_SUCCESS;
    unsigned char index = 0;
    unsigned char n;
    if(len < 4) {
        return AT_ERR;
    }

    if((p[0] == 'A') && (p[1] == 'T') && (p[len-2] == 0x0D) && (p[len-1] == 0x0A)) {
        if(len == 4) { /* 测试指令 */
            if(at_cmd_func[AT_CMD_TEST].cb != NULL) {
                at_cmd_func[AT_CMD_TEST].cb(NULL, 0); /* 执行测试指令 */
            }
        }else if(p[2] == '+') { /* 执行指令解析 */
                index = AT_cmd_search(p, len); /* 查找匹配的执行指令, 0-已匹配, !0-未匹配*/
                if(index) {
                    if(at_cmd_func[index].cb != NULL) {
                        n = mstrlen(at_cmd_func[index].str);
                        ret = at_cmd_func[index].cb(p+n, len-n); /* 执行对应的指令函数, p+n:将指令参数传输执行函数,len-n-2:指令参数有效长度 */ 
                    }else {
                        ret = AT_ERR_FUN_UNUSED; /* 没有可执行函数 */
                    }
                }else {
                    ret = AT_ERR_UNINVAL; /* 未找到匹配的指令 */
                }
        }else { /* 格式不匹配 */
            return AT_ERR; 
        }
        return ret;
    }

}

【测试】

我在接收到指令后执行at_cmd_parse 发送AT、AT+SETRTC=成功的返回需要的信息。

image.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 指令
    +关注

    关注

    1

    文章

    617

    浏览量

    36803
  • 串口
    +关注

    关注

    15

    文章

    1592

    浏览量

    80423
  • 开发板
    +关注

    关注

    25

    文章

    5766

    浏览量

    106358
  • 上位机
    +关注

    关注

    27

    文章

    980

    浏览量

    56020
  • CW32
    +关注

    关注

    1

    文章

    257

    浏览量

    1315
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32L011电机驱动控制开发板-软件

    CW32L011电机驱动控制开发板-软件分析 衔接上一个硬件
    的头像 发表于 08-13 10:44 ?141次阅读
    <b class='flag-5'>CW32L</b>011电机驱动控制开发板-软件

    CW32L011电机驱动电机控制开发板-硬件1

    CW32L011电机驱动电机控制开发板-硬件介绍 后面有软件分析
    的头像 发表于 08-12 14:20 ?330次阅读
    <b class='flag-5'>CW32L</b>011电机驱动电机控制开发板-硬件1

    基于CW32L010的高性能温控器方案

    武汉芯源半导体的明星产品CW32L010系列MCU凭借其ARM Cortex-M0+内核、超低功耗特性以及丰富的外设接口,为温控器设计提供了理想的解决方案。 本文将介绍无锡梓轩电子基于武汉芯源半导体低功耗CW32L010单片机开发的温控器方案,功能全面,性价比突出。
    的头像 发表于 07-02 09:47 ?596次阅读
    基于<b class='flag-5'>CW32L</b>010的高性能温控器方案

    基于CW32L010的高性能温控器方案

    温控器作为环境控制系统中的核心设备,广泛应用于工业自动化、智能家居、农业温室等诸多领域,正朝着智能化、精准化和低功耗方向发展。武汉芯源半导体的明星产品CW32L010系列MCU凭借其ARM
    发表于 07-02 09:46

    基于CW32L010单片机的扫振一体电动牙刷应用方案

    大幅摆动实现了高效的刷牙方式,这种设计能够更高效地清洁牙齿和牙龈沟,为用户带来全新的洁牙体验?。本文将介绍武汉芯源半导体CW32L010单片机在扫振一体电动牙刷上的应用方案。 图1:电动牙刷方案
    发表于 06-17 09:38

    CW32L010 ESC Driver 电机控制套件使用

    CW32L010ESC_Driver电机驱动板是武汉芯源科技推出的一款低成本BLDC无刷直流电机开发板。在立创开源硬件平台可以查看该项目的详情。 https://oshwhub.com
    发表于 06-13 18:12

    武汉芯源半导体CW32L010在两轮车仪表的应用介绍

    CW32L010凭借其优异的性能、丰富的外设资源和超低功耗特性,为两轮车仪表盘应用提供了高性价比的解决方案。其宽电压工作范围和工业级温度特性,特别适合车辆电子应用的严苛环境。对于想采用CW32L010进行两轮车仪表盘开发的客户,武汉芯源半导体可提供全面的技术支持,助力客户
    的头像 发表于 05-13 14:07 ?365次阅读
    武汉芯源半导体<b class='flag-5'>CW32L</b>010在两轮车仪表的应用介绍

    武汉芯源半导体CW32L010在两轮车仪表的应用介绍

    随着两轮电动车的智能化发展,仪表盘作为人机交互的重要界面,其功能需求日益复杂。武汉芯源半导体的安全低功耗单片机CW32L010凭借其优异的性能和丰富的外设资源,成为两轮车仪表盘应用的理想选择。 本文
    发表于 05-13 14:06

    CW32L010 Motor Control Driver无刷电机驱动板上手体验

    CW32L010无刷电机驱动开发板上手体验
    的头像 发表于 12-26 09:26 ?1194次阅读
    <b class='flag-5'>CW32L</b>010 Motor Control Driver无刷电机驱动板上手体验

    方案介绍|CW32L010安全低功耗MCU:驱动高速风筒新力量

    芯源半导体CW32L010系列MCU可支持低成本、高性能、低功耗、高度集成的高速风筒方案,以满足市场对高效、安全、智能的高速风筒需求。 本文将介绍武汉芯源半导体CW32L010系列单片机在高速风筒
    发表于 12-10 09:57

    CW32L010 Mini Board 测评】简介、点灯

    CW32L010 Mini Board 测评】简介、点灯 CW32L010 Mini Board 是 武汉芯源半导体 设计的基于 CW32L010 的开发板, 简介 CW32L01
    发表于 11-17 06:39

    CW32L010学习笔记

    记录CW32L010学习过程
    的头像 发表于 11-15 17:40 ?3486次阅读
    <b class='flag-5'>CW32L</b>010学习笔记

    CW32L010 新品初体验

    最近我们迎来了CW32L010新品的正式发布,标志着嵌入式技术领域的又一次创新突破。今日,我们有幸进行该新品的首次使用体验,以一块L010核心板为例,体验一下这颗芯片。 一、核心板概览 如图所示
    的头像 发表于 11-14 17:45 ?1048次阅读
    <b class='flag-5'>CW32L</b>010 新品初体验

    CW32L0100核心板的使用体验

    最近我们迎来了CW32L010新品的正式发布,标志着嵌入式技术领域的又一次创新突破。今日,我们有幸进行该新品的首次使用体验,以一块L010核心板为例,体验一下这颗芯片。
    的头像 发表于 10-30 15:29 ?742次阅读
    <b class='flag-5'>CW32L</b>0100核心板的使用体验

    CW32L010安全低功耗MCU,树立M0+产品行业新标杆!

    CW32L010系列产品可以阻止这个入侵,我们允许用户划定一块指令存储区域,只能通过指令总线取指令执行,不允许通过数据总线访问数据。在这个区域内,即使攻击者尝试通过下载间谍程序挟持
    发表于 10-09 10:08