当前位置: 首页> 财经> 股票 > 中央人民政府网站_长春平原网站建设_长沙关键词优化首选_seo资源咨询

中央人民政府网站_长春平原网站建设_长沙关键词优化首选_seo资源咨询

时间:2025/7/11 17:25:33来源:https://blog.csdn.net/songisgood/article/details/144651233 浏览次数:0次
中央人民政府网站_长春平原网站建设_长沙关键词优化首选_seo资源咨询

   1、设计目的 

山景提供的SDK是蓝牙音箱demo,用户使用ADC按键或者IR遥控器,进行人机交互。然而现实很多场景,需要和单片机通信,不管是ADC按键或者IR接口都不适合和单片机通信。这里设计个AT指令用来和BP1048通信。AT指令如下图所示为控制指令。

设计AT指令集

指令功能
AT+CA指定音量
AT+CB播放和暂停
AT+CC下一曲
AT+CD上一曲
AT+CE音量+
AT+CF音量-
AT+CG蓝牙是否开启后台
AT+CJ单曲播放 循环顺序播放
AT+CK蓝牙自动后台
AT+CN提示音
AT+CP此指令是设置上电自动进入模式
AT+CQEQ 设置
AT+CR设置自动回传功能
AT+CT设置波特率
AT+CM切换模式
AT+CU静音
AT+CZ芯片复位
AT+AA播放模式
AT+AC指定播放模式
AT+BA接挂电话控制指令

 返回消息包括

M1+0000000E当前设备播放的文件为0x0E
M2+0000000F当前设备的文件总数是0x0F,注意是合法的音频文件
MT+0000001E当前文件的总时间为0x1E 秒
MK+00000004当前文件已经播放到了0x04秒
MF+XXXXXXX当前播放的文件的名称是xxxxxx。这里文件名是完整的

 上述指令基本能覆盖大部分需求。

2、移植AT指令引擎

a、在SDK中添加AT组件

b、在RTOS系统中添加一个AT处理任务服务

 at_task程序如下所示


#include <string.h>
#include "type.h"
#include "app_config.h"
#include "rtos_api.h"
#include "app_message.h"
#include "debug.h"
#include "at_task.h"
#include "uarts.h"
#include "uarts_interface.h"
#include "AT_command.h"
#include "irqn.h"
#include "task.h"
#include "timers.h"
#include "FreeRTOS.h"
#include "timer.h"
#include "timeout.h"
#include "mode_task.h"
#include "bt_play_mode.h"#define AT_APP_TASK_STACK_SIZE 1024 // 512//1024#define AT_APP_TASK_PRIO 3TIMER TimerOut; //
xTaskHandle taskAtHandle;static uint8_t timeLockFlag = 0;ATAppContext AtAppCt;#define UART_RX_LEN 256
#define UART_TX_LEN 300/**\brief*/
typedef struct
{uint8_t buff[UART_RX_LEN];uint16_t lenth;uint8_t flag;uint8_t busy;uint8_t u8RxCnt;
} UART_STRUCT;static UART_STRUCT AtRxBuf;uint8_t AtTxBuff[UART_TX_LEN] = {0};static void AtAppInit(void);static void AtTaskEntrance(void *param)
{MessageContext msg;while (1){MessageRecv(AtAppCt.msgHandle, &msg, AT_APP_MSG_TIMEOUT);if(msg.msgId != MSG_NONE){switch(msg.msgId){case MSG_AT_UDISK_SONG_ALL_MSG:{AT_PPRINTF("\n");sprintf( AtTxBuff, "M1+%08X\r\n",AtAppCt.gMediaPlayer->CurFileIndex );		//当前索引AT_PPRINTF(AtTxBuff);vTaskDelay(1);sprintf( AtTxBuff, "M2+%08X\r\n",AtAppCt.gMediaPlayer->TotalFileSumInDisk );		//当前设备文件总数AT_PPRINTF(AtTxBuff);vTaskDelay(1);sprintf( AtTxBuff, "MK+%08X\r\n",AtAppCt.gMediaPlayer->CurPlayTime );			//当前播放时间AT_PPRINTF(AtTxBuff);sprintf( AtTxBuff, "MF+%s\r\n",AtAppCt.gMediaPlayer->file_longname );			//当前播放时间AT_PPRINTF(AtTxBuff);}break;case MSG_AT_UDISK_SONG_SIGNAL_MSG:{AT_PPRINTF("\n");sprintf( AtTxBuff, "M1+%08X\r\n",AtAppCt.gMediaPlayer->CurFileIndex );		//当前索引AT_PPRINTF(AtTxBuff);vTaskDelay(1);sprintf( AtTxBuff, "M2+%08X\r\n",AtAppCt.gMediaPlayer->TotalFileSumInDisk );		//当前设备文件总数AT_PPRINTF(AtTxBuff);vTaskDelay(1);sprintf( AtTxBuff, "MK+%08X\r\n",AtAppCt.gMediaPlayer->CurPlayTime );			//当前播放时间AT_PPRINTF(AtTxBuff);sprintf( AtTxBuff, "MF+%s\r\n",AtAppCt.gMediaPlayer->file_longname );			//当前播放时间AT_PPRINTF(AtTxBuff);}break;case MSG_AT_MODE_CON_BTAUDIO_IDEL_MSG:		//蓝牙空闲模式{AT_PPRINTF("\n");sprintf( AtTxBuff, "TS+01\r\n");		//蓝牙模式AT_PPRINTF(AtTxBuff);sprintf( AtTxBuff, "QM+01\r\n");		//蓝牙模式AT_PPRINTF(AtTxBuff);}break;case MSG_AT_MODE_CON_BTAUDIO_PLAYING_MSG:    //蓝牙模式{AT_PPRINTF("\n");sprintf( AtTxBuff, "TS+02\r\n");		//蓝牙播放音乐AT_PPRINTF(AtTxBuff);SysModeEnter(ModeBtAudioPlay);}break;case MSG_AT_MODE_CON_BTAUDIO_SUSPEND_MSG:    //挂起蓝牙{AT_PPRINTF("\n");sprintf( AtTxBuff, "TS+01\r\n");		//蓝牙模式AT_PPRINTF(AtTxBuff);}break;case MSG_AT_MODE_CON_UDISK_MSG:		//U盘模式{AT_PPRINTF("\n");sprintf( AtTxBuff, "MU+01\r\n");		//U盘插入AT_PPRINTF(AtTxBuff);sprintf( AtTxBuff, "QM+02\r\n");		//U盘模式AT_PPRINTF(AtTxBuff);AtStackServiceMsgSend(MSG_AT_UDISK_SONG_SIGNAL_MSG);//发送切换歌曲指令}break;case MSG_AT_MODE_CON_UDISK_OUT_MSG:		//拔出U盘{AT_PPRINTF("\n");sprintf( AtTxBuff, "MU+02\r\n");		//U盘拔出AT_PPRINTF(AtTxBuff);sprintf( AtTxBuff, "QM+01\r\n");		//蓝牙模式AT_PPRINTF(AtTxBuff);SysModeEnter(ModeBtAudioPlay);}break;case MSG_AT_MODE_CON_AUX_MSG:		//AUX模式{AT_PPRINTF("\n");sprintf( AtTxBuff, "QM+05\r\n");		//U盘模式AT_PPRINTF(AtTxBuff);SysModeEnter(ModeLineAudioPlay);}break;case MSG_AT_MODE_CON_IDEL_MSG:		//空闲模式{AT_PPRINTF("\n");sprintf( AtTxBuff, "QM+00\r\n");		//U盘模式AT_PPRINTF(AtTxBuff);}break;}}if (timeLockFlag == 0 && IsTimeOut(&TimerOut)){timeLockFlag = 1;AtRxBuf.buff[AtRxBuf.u8RxCnt] = 0;AT_CMD_Process(AtRxBuf.buff, AtRxBuf.u8RxCnt);AtRxBuf.u8RxCnt = 0;}}
}static void AtUartReceive(void)
{AT_CMD_Process(AtRxBuf.buff, AtRxBuf.u8RxCnt);
}/***************************************************************************************** APIs**/
int32_t AtAppTaskStart(void)
{AtAppInit();APP_DBG("AtTask  Create\n");TimeOutSet(&TimerOut, 20);xTaskCreate(AtTaskEntrance, "AtApp", AT_APP_TASK_STACK_SIZE, NULL, AT_APP_TASK_PRIO, &taskAtHandle);
}static void AtAppInit(void)
{memset(&AtAppCt, 0, sizeof(ATAppContext));AtAppCt.msgHandle = MessageRegister(AT_NUM_MESSAGE_QUEUE);
}void AtStackServiceMsgSend(uint16_t msgId)
{MessageContext		msgSend;msgSend.msgId = msgId;MessageSend(AtAppCt.msgHandle, &msgSend);}

 在主任务中启动at_task任务

3、运行调试

 可以看出AT指令任务已经运行。

关键字:中央人民政府网站_长春平原网站建设_长沙关键词优化首选_seo资源咨询

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: