STM32串口通信实践:JQ8900-16P模块连接指南

这篇文章将介绍JQ8900一线通信实现音频播放。

目录

一、硬件JQ8900-16

 二、引脚说明

三、使用说明

四、代码编写

 五、音频

六、现象


一、硬件JQ8900-16(有很多功能特征,不一一列举)

1、支持MP3  WAV 硬件解码

2、多种控制模式、两线串口模式、一线串口控制、按键模式

 

 

 二、引脚说明

STM32采用型号为F103RCT6

 

此处只介绍了本次一线串口用到的引脚 ,VPP作为一线串口,我接在了STM32的PA10引脚(本程序用到了软件触发,因此引脚可任意选取); BUSY空闲不接;VCC、GND分别接电源正负极;SPK-、SPK+直接和喇叭相连接。  

引脚序号

引脚名称

功能描述

备注

1

VPP

一线串口

2

BUSY

播放指示灯

有音频输出时高,无音频输出低

3

GND

电源地

4

DC-5V

模块电源输入

不可以超过5.2V

5

SPK-

喇叭+

接2W/8R以下无源喇叭

6

SPK+

喇叭-

 

三、使用说明(因为我所做的项目对此模块要求较低,这里只做比较基础的功能使用)

 

这个时序图很重要,JQ8900的初始化和使用主要依靠此图。 

值得注意的是:

以下为命令说明:

0x00~0x09:仅表示数字0~9。

0x0a: 为单字节控制指令,用于清空上一次接收的数字。

0x0b~0x10:为多字节控制指令,需要和0x00~0x09配合使用。

0x11~0x1c:为单字节控制指令,只需要发送一个控制指令即可。

 

选取播放说明:最多只能存储19份音频,1-9份音频和10-19的音频的代码略有不同。 

Eg: 选曲目号2播放

步骤如下: 清空数字->曲目号->“选曲播放”控制指令。

发送代码 0x0A->0x02->0x0b

使用单片机发送函数如下:

SendData(0x0a);

SendData(0x02);

SendData(0x0b);

选曲目号15播放

SendData(0x0a);

SendData(0x01);

SendData(0x05);

SendData(0x0b);

四、代码编写

1、JQ8900.C 

#include "JQ8900.h"
#include "DELAY.H"
#include "stm32f10x.h"


/**
   *  @brief    GPIO初始化
   *  @param		无
   *  @retvel		无
   */
void JQ8900_Init(void)
{
	
	RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_OD ;
	GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10; //此处采用软件触发,引脚可任意选取
	GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz ;
	GPIO_Init (GPIOA,&GPIO_InitStructure);
	
}

/**
   *  @brief    发送字节函数
   *  @param		字节数据
   *  @retvel		无
   */
void SendData(uint8_t Data)
{
	uint8_t m;
	GPIO_WriteBit(GPIOA,GPIO_Pin_10,Bit_SET);//PA10置高电平
	Delay_us(1000);
	
	GPIO_WriteBit(GPIOA,GPIO_Pin_10,Bit_RESET);//PA10置低电平	
	Delay_us (4000);                 //最好给4ms的延时
	
	for( m=0 ; m<8 ; m++)
	{
		GPIO_WriteBit(GPIOA,GPIO_Pin_10,Bit_SET);
		if(Data&0x01)
		{
			Delay_us(500);
			GPIO_WriteBit(GPIOA,GPIO_Pin_10,Bit_RESET);
			Delay_us(210);
		}
		else
		{
			Delay_us (210);
			GPIO_WriteBit(GPIOA,GPIO_Pin_10,Bit_RESET);
			Delay_us(500);
		}
		Data>>=1;
	}
	
	GPIO_WriteBit(GPIOA,GPIO_Pin_10,Bit_SET);
}


/**
   *  @brief    选曲播放函数
   *  @param		曲目号Num_L(0x__),Num_H(0x__)
   *  @retvel		无
   */
void Play_Spe_Song(uint8_t Num_L,uint8_t Num_H,uint32_t xms)
{
		SendData(0x0A);
		if(Num_H==0)
		{
			SendData(Num_L);
			Delay_ms (xms); //延时,根据音频时长进行调整
		}
		else
		{
			SendData(Num_L);
			SendData(Num_H);
			Delay_ms (xms); //延时,根据音频时长进行调整
		}
		SendData(0x0B);
}

2、JQ8900.H 

#ifndef __JQ8900_H__
#define __JQ8900_H__

#include "stm32f10x.h"

void JQ8900_Init(void);
void SendData(uint8_t Data);
void Play_Spe_Song(uint8_t Num_L,uint8_t Num_H,uint32_t xms);



#endif

3、main.c (实现功能从音频1自动播放到音频8)

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.H"
#include "JQ8900.H"
				
							
int main(void)
{

	JQ8900_Init();		
	
	while(1)      
	{		
		uint8_t m=0x00;
		int i;
		for(i=0;i<9;i++)
		{	
		    Play_Spe_Song(m,0x00,1000);
		    m+=1;	
		}
	}	
}

 

 

 五、音频

链接:https://pan.baidu.com/s/1txL3wMIC8URzZIcZ1JR8wA 
提取码:1111

作者:只会C语言·

物联沃分享整理
物联沃-IOTWORD物联网 » STM32串口通信实践:JQ8900-16P模块连接指南

发表回复