STM32F4XX 使用 JQ8400 FL 语音模块播放声音

 

  • 一开始打算用单总线的通信方式

  • 通过文档上的介绍找到 ONE LINE 的一线串口脚

  • //使能GPIO口
    //按照时序图编写程序
    
    /*
    模块——————————单片机
    ONE LINE—————————PC6
    DC-5V———————————5V
    GND———————————GND
    busy         ====    pc8
    
    
    */
     
    /*
     * 功  能:ONEUART初始化
     * 参  数:无
     * 返回值:无
     */
    void ONEUART_Init(void)
    {
    	//定义一个 GPIO 结构体变量
    	GPIO_InitTypeDef  GPIO_InitStruct ;
    
    	//1、开启 GPIOG 组时钟
    	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
    
    	//2、配置以及初始化 GPIO
    	GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_OUT;   	//输出模式
    	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;		//推挽
    	GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;		//上拉
    	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;	//输出速度
    	GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_6;  		//设置引脚
    	GPIO_Init(GPIOG, &GPIO_InitStruct);				//使用配置好的结构体去初始化相应的GPIO口
    	// 拉高电平
    	GPIO_SetBits(GPIOC,GPIO_Pin_6);
    	
    	
    		//2、配置以及初始化 GPIO
    	GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_IN;   	//输入模式
    	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;		//推挽
    	GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;		//上拉
    	GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_8;  		//设置引脚
    	GPIO_Init(GPIOG, &GPIO_InitStruct);				//使用配置好的结构体去初始化相应的GPIO口
    	// 拉高电平
    	GPIO_SetBits(GPIOC,GPIO_Pin_8);
    }
    
    /*
     * 功  能:ONEUART发送字节
     * 参  数:无
     * 返回值:无
     */
    void ONEUART_SendData(u8 addr)
    {
    		u8 i = 0;
    		//开始拉高
    		ONEUART_out(1);
    		delay_ms(2);
    		ONEUART_out(0);
    		delay_ms(4);
    		//send byte 
    		for( i = 0 ; i < 8 ; i++)
    		{
    			
    		ONEUART_out(1);
    	
    				if(addr & 0x01)
    				{
    						delay_us(1200);
    						ONEUART_out(0);
    						delay_us(400);
    				}
    				else 
    				{
    					delay_us(400);
    					ONEUART_out(0);
    					delay_us(1200);
    				}
    				addr =addr>>1; 
    		}
    		ONEUART_out(1);
    		delay_ms(10);
    }
    

     

 

查看手册

 

STM32F4XX 使用 JQ8400 FL 语音模块播放声音_第1张图片

 

 

STM32F4XX 使用 JQ8400 FL 语音模块播放声音_第2张图片

 

 

 

音频文件已经提前加入JQ8400芯片,程序执行后busy位(播放会拉高)始终为低电位,

一开始怀疑时序函数有问题,用dht11接收了数据后发现正常,

然后怀疑是模块有问题,决定再试试串口通信

 

 

 

================= == == ======== 分割线 ==============================================

继续查看手册

 

 

 

STM32F4XX 使用 JQ8400 FL 语音模块播放声音_第3张图片

 

STM32F4XX 使用 JQ8400 FL 语音模块播放声音_第4张图片



/*
RX         -----   TX PA3
TX        ------   RX PA2

*/
 
 
 /*
 * 功  能:UART2 的初始化
 * 参  数:
 * 		BaudRate	--->波特率,就是常见的那些 115200 9600 38400 ...
 * 返回值:无
 * 说  明:收发双方的波特率必须一致
 */
 
 
 
 
 
 	void UART2_Init(uint32_t BaudRate)
{	

	GPIO_InitTypeDef GPIO_InitStruct;
	USART_InitTypeDef USART_InitStruct;
	NVIC_InitTypeDef NVIC_InitStruct;
	
	//1、开启串口1时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
	
	//2、开启 PA2 PA3 时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA ,ENABLE);
	
	//3、将 PA2 PA3 复用为 串口1 的特殊功能引脚
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART1);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART1);
	
	GPIO_InitStruct.GPIO_Mode   = GPIO_Mode_AF;//复用功能!!!!
	GPIO_InitStruct.GPIO_OType	= GPIO_OType_PP;
	GPIO_InitStruct.GPIO_Pin    = GPIO_Pin_2|GPIO_Pin_3;
	GPIO_InitStruct.GPIO_PuPd   = GPIO_PuPd_UP;
	GPIO_InitStruct.GPIO_Speed  = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	//4、配置串口的模式
	USART_InitStruct.USART_BaudRate = BaudRate;   //波特率
	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//关闭硬件流控
	USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//收发
	USART_InitStruct.USART_Parity = USART_Parity_No;    		//无检验位
	USART_InitStruct.USART_StopBits = USART_StopBits_1;  		//1位停止位
	USART_InitStruct.USART_WordLength = USART_WordLength_8b; 	//8位数据位
	USART_Init(USART2 ,&USART_InitStruct);
	
	//5、开启 接收 中断
	USART_ITConfig(USART2 , USART_IT_RXNE ,ENABLE);
	
	//6、使能 NVIC 
	NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
	NVIC_Init(&NVIC_InitStruct);	
	
	USART_Cmd(USART2 ,ENABLE);
 
 }
 

 主函数发送 AA 02 00 AC 开始播放

 

		//发送数据
	USART_SendData(USART2,0xaa);

			//检测是否发送完成
		while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
		//发送数据
	USART_SendData(USART2,0x02);
	
			//检测是否发送完成
		while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
		//发送数据
	USART_SendData(USART2,0x00);
	
			//检测是否发送完成
		while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
		//发送数据
	USART_SendData(USART2,0xac);
	
	
		delay_s(4);
	

 

 

发现busy拉高证明模块收到了我的播放指令,但是喇叭只有咚咚声音,经过排查,发现是由于供电不足造成的,于是多加了一条供电线用电报功能,成功放出JQ8400里面的音频文件

你可能感兴趣的:(STM32F4XX 使用 JQ8400 FL 语音模块播放声音)