STM32控制JQ8400语音播报模块

时间记录:2024/2/7

一、JQ8400引脚介绍

标示说明
ONE LINE一线操作引脚
BUSY忙信号引脚,正在播放语音时输出高电平
RX串口两线操作接收引脚
TX串口两线操作发送引脚
GND电源地引脚
DC-5V电源引脚,3.3-5V
DAC-RDAC输出右声道引脚
DAC-LDAC输出左声道引脚
SPK-喇叭-引脚
SPK+喇叭+引脚

二、一线操作

(1)时序图
1线时序图
(2)时序分析
2.2.1 总线拉低2ms以上产生引导码
2.2.2 发送数据“1”,高电平大于1200us,低电平大于400us,高低电平时间比例3:1
2.2.3 发送数据“0”,高电平大于400us,低电平大于1200us,高低电平时间比例1:3
2.2.4 发送一字节指令和数据时低位先发
(3)控制指令

指令(HEX)功能说明
00数字0数字0-9可以用于需要数字的功能,比如选曲、设置音量、设置EQ、设置循环模式、设置通道、设置插播曲目先发数字后发功能指令。
01数字0
02数字2
03数字3
04数字4
05数字5
06数字6
07数字7
08数字8
09数字9
0A清零数字清除发送的数字
0B选曲确认配合数字实现
0C设置音量0-30
0D设置EQ
0E设置循环模式
0F设置通道
10设置插播曲目
11播放单字节控制指令,仅需发送一个控制指令即可。
12暂停
13停止
14上一曲
15下一曲
16上一目录
17下一目录
18选择SD卡
19选择U盘
1A选择FLASH
1B系统睡眠
(4)注意点
  • 音频文件命名需要为5位数字,该5位数字即为曲目号,例如00001.mp3
  • 音频文件需要放置在根目录下
  • 引导码延时要大于2ms,建议使用4ms
  • 高低电平时间比例在2-5都可以识别到
  • 发送两个字节,中间空闲状态建议维持10ms以上
  • 三、二线串口操作

    (1)串口波特率9600,音频文件命名无要求,复制的顺序即播放的曲目号
    (2)常用的几个命令介绍,其余命令可通过查看操作手册设置

  • 设置音量:AA 13 01 音量0-30 SM校验和
  • 播放指定曲目:AA 07 02 曲目高 曲目低 SM校验和
  • 停止播放:AA 04 00 AE
  • 设置循环模式:AA 18 01 循环模式 SM校验和
  • 四、示例代码

    (1)头文件

    #ifndef __JQ8400_H__
    #define __JQ8400_H__
    #include "stm32f10x.h"
    #include "delay.h"
    #include "sys.h"#define ONELINERCC      RCC_APB2Periph_GPIOB
    #define ONELINEGPIO     GPIOB
    #define ONELINEPIN      GPIO_Pin_5
    #define ONELINE         PBout(5)void vJq8400Init(u8 mode);//初始化,0:ONELINE操作,1串口操作
    void vOnelineVolume(int vol);//设置音量
    void vOnelinePlay(int cnt,u8 loop);//播放音频,最大999
    void vOnelinePause(u8 mode);//暂停/继续
    void vOnelineStop(void);//停止
    void vUartVolume(u8 vol);//设置音量
    void vUartPlay(int cnt,u8 loop);//播放音频,最大999
    void vUartStop(void);//停止#endif

    (2)源文件

    #include "jq8400.h"void vJq8400Init(u8 mode)
    {if(mode==0){//ONELINE操作//初始化时钟配置端口RCC_APB2PeriphClockCmd(ONELINERCC,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_Pin = ONELINEPIN;GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(ONELINEGPIO,&GPIO_InitStruct);Delay_Init();}else if(mode==1){//串口操作RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//发送数据端口,复用推挽输出GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStruct);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);USART_InitTypeDef USART_InitStruct;USART_InitStruct.USART_BaudRate = 9600;//波特率USART_InitStruct.USART_Mode = USART_Mode_Tx;//模式,发模式USART_InitStruct.USART_WordLength = USART_WordLength_8b;//数据位长度,8位USART_InitStruct.USART_Parity = USART_Parity_No;//校验位USART_InitStruct.USART_StopBits = USART_StopBits_1;//一位停止位USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_Init(USART1,&USART_InitStruct);USART_Cmd(USART1,ENABLE);}
    }static void vJq8400SendByte(u8 dataOrCmd)
    {ONELINE=1;Delay_Ms(5);//两个字节发送之间的延时//发送引导码,大于2ms,建议为4msONELINE=0;Delay_Ms(4);for(u8 i=0;i<8;i++){//发送数据ONELINE=1;if(dataOrCmd&0x01){//最低位为1,发送位1,高低电平时间3:1表示发送1,脉冲比例基数2-5都可以识别Delay_Us(1200);ONELINE=0;Delay_Us(400);}else{//发送位0Delay_Us(400);ONELINE=0;Delay_Us(1200);}dataOrCmd >>= 1;}ONELINE=1;Delay_Ms(5);//恢复空闲状态
    }static void vUartSendByte(u8 data)
    {while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);//0表示数据还未转移到移位寄存器,1表示数据已经移动到移位寄存器可以发送数据USART_SendData(USART1,data);while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);//1表示发送完成
    }void vOnelineVolume(int vol)
    {vJq8400SendByte(0x0A);//清除数字vJq8400SendByte(vol/10);//设置音量vJq8400SendByte(vol%10);vJq8400SendByte(0x0C);//设置音量
    }void vOnelinePlay(int cnt,u8 loop)
    {vJq8400SendByte(0x0A);//清除数字vJq8400SendByte(cnt/100);//设置数字vJq8400SendByte(cnt/10%10);vJq8400SendByte(cnt%10);vJq8400SendByte(0x0B);//确认选曲vJq8400SendByte(0x0A);//清除数字vJq8400SendByte(loop);//设置数字vJq8400SendByte(0x0E);//设置循环模式,0:倒序循环播放音频文件,1:循环播放当前曲目,2:播放1次,3:循环随机播放音频文件vJq8400SendByte(0x11);//播放选曲
    }void vOnelinePause(u8 mode)
    {if(mode==0)vJq8400SendByte(0x12);else if(mode==1)vJq8400SendByte(0x11);
    }void vOnelineStop(void)
    {vJq8400SendByte(0x13);
    }void vUartVolume(u8 vol)
    {vUartSendByte(0xAA);vUartSendByte(0x13);vUartSendByte(0x01);vUartSendByte(vol);vUartSendByte((0xAA+0x13+0x01+vol));//SM校验和
    }void vUartPlay(int cnt,u8 loop)
    {//设置循环模式vUartSendByte(0xAA);vUartSendByte(0x18);vUartSendByte(0x01);if(loop==0){vUartSendByte(0x02);vUartSendByte(0xC5);}else if(loop==1){vUartSendByte(0x01);vUartSendByte(0xC4);}//播放曲目vUartSendByte(0xAA);vUartSendByte(0x07);vUartSendByte(0x02);vUartSendByte(cnt/255);vUartSendByte(cnt%255);vUartSendByte((0xAA+0x07+0x02+cnt));//SM校验和
    }void vUartStop(void)
    {vUartSendByte(0xAA);vUartSendByte(0x04);vUartSendByte(0x00);vUartSendByte(0xAE);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/461545.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为第二批难题一:基于预训练AI模型的元件库生成

我的理解&#xff1a;华为的这个难道应该是想通过大模型技术&#xff0c;识别元件手册上的图文内容&#xff0c;与现有建库工具结合&#xff0c;有潜力按标准生成各种库模型。 正好&#xff0c;我们正在研究&#xff0c;利用知识图谱技术快速生成装配模型&#xff0c;其中也涉…

内网渗透靶场02----Weblogic反序列化+域渗透

网络拓扑&#xff1a; 攻击机&#xff1a; Kali: 192.168.111.129 Win10: 192.168.111.128 靶场基本配置&#xff1a;web服务器双网卡机器&#xff1a; 192.168.111.80&#xff08;模拟外网&#xff09;10.10.10.80&#xff08;模拟内网&#xff09;域成员机器 WIN7PC192.168.…

【CV论文精读】EarlyBird: Early-Fusion for Multi-View Tracking in the Bird’s Eye View

【CV论文精读】EarlyBird: Early-Fusion for Multi-View Tracking in the Bird’s Eye View 0.论文摘要 多视图聚合有望克服多目标检测和跟踪中的遮挡和漏检挑战。多视图检测和3D对象检测中的最新方法通过将所有视图投影到地平面并在鸟瞰视图&#xff08;BEV&#xff09;中执…

手撸一个M3U8下载插件

M3U8嗅探下载 思路与核心代码 基本思路 ​ M3U8视频格式是一种基于HTTP Live Streaming&#xff08;HLS&#xff09;协议的视频文件格式。它是苹果公司开发的&#xff0c;目前广泛应用于iOS、macOS和tvOS等系统中。与传统的视频格式不同&#xff0c;M3U8视频格式将整个视频分…

VMware17上安装centos7.9

一、下载安装包&#xff1a; 1、VMware安装 VMware 下载地址&#xff1a; https://www.vmware.com/cn/products/workstation-pro.html VMware下载后安装即可 安装教程可以参考VMware安装教程 2、CentOs7.9下载地址&#xff1a; http://mirrors.aliyun.com/centos/7.9.2009/iso…

分布式系统架构介绍

1、为什么需要分布式架构&#xff1f; 增大系统容量&#xff1a;单台系统的性能瓶颈&#xff0c;多台机器才能应对大规模的应用场景&#xff0c;所以就需要我们的应用支撑平台具备分布式架构。 加强系统的可用&#xff1a;为了满足业务的SLA要求&#xff0c;需要通过分布式架构…

形态学算法应用之连通分量提取的python实现——图像处理

原理 连通分量提取是图像处理和计算机视觉中的一项基本任务&#xff0c;旨在识别图像中所有连通区域&#xff0c;并将它们作为独立对象处理。在二值图像中&#xff0c;连通分量通常指的是所有连接在一起的前景像素集合。这里的“连接”可以根据四连通或八连通的邻接关系来定义…

安全名词解析-威胁情报、蜜罐技术

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 威胁情报02 蜜罐技术 01 威胁情报 威胁情报(Threat Intelligence)&#xff0c;也被称作安全情报(Security Intelligence)、安全威胁情报(Security Threat Intelligence)。 关于威胁情报的定义有很多…

零基础学Python之网络编程

1.什么是socket 官方定义&#xff1a; 套接字&#xff08;socket&#xff09;是一个抽象层&#xff0c;应用程序可以通过它发送或接收数据&#xff0c;可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中&#xff0c;并与网络中的其他应用…

K8S之Pod常见的状态和重启策略

Pod常见的状态和重启策略 常见的Pod状态PendingPodScheduledUnschedulablePodInitializingImagePullBackOffInitializedRunningErrorCrashLoopBackOffTerminatingSucceededFailedEvictedUnknown Pod的重启策略使用Always重启策略使用Never重启策略使用OnFailure重启策略(常用) …

C++入门全集(1):初窥门径

一、前言 C是一种计算机高级程序设计语言&#xff0c;它在C语言的基础上进行了进一步的扩充和完善&#xff0c;并增加了许多有用的库&#xff0c;是一种面向对象的程序设计语言。 所以&#xff0c;C是兼容C语言语法的。 我打算把所有C入门需要学习的知识整合成一个全集&…

香港倾斜模型3DTiles数据漫游

谷歌地球全香港地区倾斜摄影数据&#xff0c;通过工具转换成3DTiles格式&#xff0c;将这份数据完美加载到三维数字地球Cesium上进行完美呈现&#xff0c;打造香港地区三维倾斜数据覆盖&#xff0c;完美呈现香港城市壮美以及维多利亚港繁荣景象。再由12.5米高分辨率地形数据&am…