前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >恒玄BES2500串口通信调试及AT指令开发总结

恒玄BES2500串口通信调试及AT指令开发总结

原创
作者头像
番茄老夫子
发布2023-11-27 16:29:26
2290
发布2023-11-27 16:29:26
举报

一 前记

恒玄BES2500虽然是在耳机上使用的,可它凭借着超低的功耗,强大的资源,可以在很多可穿戴产品以及低功耗产品上使用。最近有一个产品需要用到它的AT指令。就自己实现了一个。中间遇到了一些问题,值得思考和反思一下。

二 源码解析

1 串口的初始化协议:

代码语言:javascript
复制
static void hal_uart_init(app_remoter_uart_t* remoter_uart)
{
    int ret = -1;

    if (HAL_UART_ID_0 == remoter_uart->id) {
        hal_iomux_set_uart0();
    } else if (HAL_UART_ID_1 == remoter_uart->id) {
        hal_iomux_set_uart1();
    } else {
        hal_iomux_set_uart1();
        return;
    }

   // TRACE("uart init id:%d",remoter_uart->id);
    ret = hal_uart_open(remoter_uart->id, &uart_cfg);
    ASSERT(!ret, "!!%s: UART open failed (%d)!!", __func__, ret);

    // hal_uart_irq_set_dma_handler(APP_REMOTE_CONTROL_URART_ID, uart_dma_rx_irq_handler, NULL);
    hal_uart_irq_set_dma_handler(remoter_uart->id, remoter_uart->rx_irq_handler, NULL);

    remoter_uart->rx_start(remoter_uart);
}

这里注意,使用的是串口1,硬件上特别注意力,BES的串口是可以复用的,前提一定要排查好这个两个IO没被用。

其次,发送和接收中断的初始化一定要搞清楚。笔者就是误删了接收中断。走了一些弯路。

2 串口接收完成中断:

代码语言:javascript
复制
static void rx_irq_uart1_handler(uint32_t xfer_size, int dma_error, union HAL_UART_IRQ_T status)
{
    app_remoter_uart_t* remoter_uart;
    
    ARC_FUNC_ENTER();
    remoter_uart = get_uart1_instance();

    if (xfer_size) {
        app_remoter_cmd_receive(remoter_uart->rx_buff, xfer_size);
        uart_rx_start( remoter_uart );
    }

    ARC_FUNC_EXIT();
}

这几个地方注意中断接收函数。不要漏了。

3 AT指令的主函数:

代码语言:javascript
复制
void at_command_register(void)
{
	at_register_command((uint8_t*)"AGC", (at_callback)get_flash_port, (at_callback)set_flash_port, 0, 0);
	at_register_command((uint8_t*)"NSX", (at_callback)get_trigger_port, (at_callback)set_trigger_port, 0, 0);
	at_register_command((uint8_t*)"MODE", 0, 0, 0, (at_callback)exec_trigger);
}

AT指令部分,要注意不同数据类型之间的转换。

三 总结反思

1 串口无法接收数据。

针对这个问题,花了一些时间去解决。可最后定位发现,是自己早时候把串口接收中断给注销了。这个问题是一个教训啊。平时版本一定要做好git记录。依靠人的记忆力是不靠谱的。

2 AT指令协议:

这块也是以前调试好的,可上次没保存代码,这次又不得不从新来一次。程序要要积累。就是把每个砖头做好,不要每次来做砖头。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档