向HC02蓝牙模块发送指令没有反应

做了个音乐盒用蓝牙模块HC02控制,芯片是STM32C8T6,语音模块是JQ8400-TF。用手机控制没有反应

img

部分代码如下图

img

img

img


蓝牙blue_teeth.c

#include "stm32f10x.h"
#include "delay.h"
#include "mp3.h"
#include "blue_teeth.h"

extern int state_flag;
extern int vol_count;
extern int light_flag;
extern int beep_flag;
extern int start_stop_flag;

extern int Temp_cap;
extern int Humi_cap;
extern int beep_alarm;

int init_vol_flag=1;


void Usart1_Init(unsigned int baud)//mp3
{

    GPIO_InitTypeDef gpio_initstruct;
    USART_InitTypeDef usart_initstruct;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    
    //PA9    TXD
    gpio_initstruct.GPIO_Mode = GPIO_Mode_AF_PP;
    gpio_initstruct.GPIO_Pin = GPIO_Pin_9;
    gpio_initstruct.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOA, &gpio_initstruct);
    
    //PA10    RXD
    gpio_initstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    gpio_initstruct.GPIO_Pin = GPIO_Pin_10;
    gpio_initstruct.GPIO_Speed = GPIO_Speed_10MHz;
    GPIO_Init(GPIOA, &gpio_initstruct);
    
    usart_initstruct.USART_BaudRate = baud;
    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;                                
    usart_initstruct.USART_WordLength = USART_WordLength_8b;                            
    USART_Init(USART1, &usart_initstruct);
    
    USART_Cmd(USART1, ENABLE);                                                        
    
}



void USART2_init(unsigned int baud)
{
    
    GPIO_InitTypeDef GPIO_InitStruct;
    USART_InitTypeDef USART_InitStruct;
    NVIC_InitTypeDef NVIC_InitStruct;
    
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_2;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStruct);
    
    GPIO_Ini

MP3.c



#include "sys.h"
#include "delay.h"
#include "blue_teeth.h"
#include "mp3.h"

uint16_t vol[] = {0xAA, 0x13, 0x01, 0x0F, 0xC8};/*ÒôÁ¿10  */ 
uint16_t start[]={0xAA, 0x02, 0x00, 0xAC};//²¥·Å
uint16_t stop[]={0xAA, 0x03, 0x00, 0xAD};//ÔÝÍ£
uint16_t next[]={0xAA, 0x06, 0x00, 0xB0};//ÏÂÒ»Çú
uint16_t Prev[]= {0xAA, 0x05, 0x00, 0xAF};//ÉÏÒ»Çú*/
uint16_t add_vol[]= {0xAA, 0x14, 0x00, 0xBE};//ÒôÁ¿¼Ó*/
uint16_t sub_vol[]= {0xAA, 0x15, 0x00, 0xBF};//ÒôÁ¿¼õ*/

extern int vol_count;

//mp3µÄbusy IO³õʼ»¯
void MP3_Init(void)
{ 
 GPIO_InitTypeDef  GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);     //ʹÄÜPA¶Ë¿ÚʱÖÓ
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                             //MP3-->PB.0 ¶Ë¿ÚÅäÖÃ
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;      //¸¡¿ÕÉÏÀ­ÊäÈë
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;           //IO¿ÚËÙ¶ÈΪ50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);                             //¸ù¾ÝÉ趨²ÎÊý³õʼ»¯GPIOB.8
}
 

void start_music()//¿ªÊ¼²¥·Å
{
    int t;
    for(t=0;t<4;t++)
    {        
        USART1->SR;
        USART_SendData(USART1, start[t]);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
        delay_ms(30);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
        USART_ClearFlag(USART1,USART_FLAG_TC);
    }
}

void stop_music()//ÔÝÍ£²¥·Å
{
    int t;
    for(t=0;t<4;t++)
    {        
        USART1->SR;
        USART_SendData(USART1, stop[t]);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
        delay_ms(30);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
        USART_ClearFlag(USART1,USART_FLAG_TC);
    }
}

void prev_music()//ÉÏÒ»Çú
{
    int t;
    for(t=0;t<4;t++)
    {        
        USART1->SR;
        USART_SendData(USART1, Prev[t]);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
        delay_ms(30);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
        USART_ClearFlag(USART1,USART_FLAG_TC);
    }
}



void next_music()//ÏÂÒ»Çú
{
    int t;
    for(t=0;t<4;t++)
    {        
        USART1->SR;
        USART_SendData(USART1, next[t]);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
        delay_ms(30);
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
        USART_ClearFlag(USART1,USART_FLAG_TC)

建议阅读:https://blog.csdn.net/weixin_44751294/article/details/111588963?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167897627616800227454090%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167897627616800227454090&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~pc_rank_34-1-111588963-null-null.142^v74^pc_new_rank,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=%E5%90%91HC02%E8%93%9D%E7%89%99%E6%A8%A1%E5%9D%97%E5%8F%91%E9%80%81%E6%8C%87%E4%BB%A4%E6%B2%A1%E6%9C%89%E5%8F%8D%E5%BA%94&spm=1018.2226.3001.4449

如果您的STM32C8T6芯片和HC02蓝牙模块都能够正常工作,但是您无法通过手机控制音乐盒,可能有以下几种原因:

蓝牙连接未成功:在手机上搜索蓝牙设备时,确保您已经正确地配对了HC02蓝牙模块。如果蓝牙连接未成功,则无法发送指令。

通信协议不匹配:HC02蓝牙模块使用串口通信协议,而JQ8400-TF语音模块可能使用其他通信协议。确保您使用的通信协议与您的语音模块兼容。

指令格式不正确:确保您发送的指令符合蓝牙模块的要求,并且已正确地格式化和编码。您可以查阅HC02蓝牙模块的文档以获得更多指令和编码细节。

硬件连接问题:确保所有的硬件连接都正确地接好,包括蓝牙模块、语音模块和STM32C8T6芯片。如果有任何一个连接出现了问题,都有可能导致无法控制音乐盒。

软件程序问题:最后,如果以上所有问题都没有得到解决,那么问题可能是出在您的软件程序中。确保您的程序逻辑正确,并且已正确地实现了蓝牙模块和语音模块之间的通信。您可以在程序中添加调试信息以帮助确定问题所在。

可以把代码用文本贴上来吗

img

该回答引用GPTᴼᴾᴱᴺᴬᴵ
很抱歉,由于提供的代码不完整,我无法了解您的程序的完整情况,从而给出明确的答案或解决方案。以下是一些建议,您可以尝试它们以解决问题。

  1. 确保HC-02蓝牙模块已经成功连接到您的STM32微控制器,并且蓝牙模块的电源已经打开。
  2. 确认您的STM32与蓝牙模块之间的串行通信设置正确。例如,您需要使用正确的波特率、数据位和停止位等参数。
  3. 检查您的代码中是否有任何错误。您可以通过将调试语句插入代码中来调试您的程序,以查找代码中的错误。例如,您可以使用串口打印调试信息,以便在运行时了解程序的执行状态。
  4. 确认您使用的是正确的蓝牙命令。您可以参考蓝牙模块的手册,以了解支持的命令及其语法。
  5. 检查您的电路连接是否正确。如果您的电路连接有误,可能会导致您的程序无法正常运行。请确保所有连接正确并牢固。
  6. 尝试使用其他蓝牙模块或其他STM32微控制器来测试您的程序。如果您的程序在其他硬件上工作正常,则问题可能在您的硬件上。

基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦、”(最新版更智能,功能更加强大)

首先,我建议您检查以下几点,以确保硬件和软件设置正确:

  1. 硬件连接:检查HC-02模块与STM32C8T6芯片之间的连接是否正确。确保HC-02的TXD与STM32的RXD相连,HC-02的RXD与STM32的TXD相连。同样,请检查JQ8400-TF与STM32的连接。
  2. 蓝牙模块上电:确保HC-02蓝牙模块已正确接入电源。
  3. 串口配置:请检查STM32C8T6的串口配置。确保波特率、数据位、停止位和奇偶校验位设置与HC-02蓝牙模块和JQ8400-TF语音模块相匹配。
  4. 软件代码:确认您的代码可以正确解析从手机发送的蓝牙数据,并将正确的指令发送给JQ8400-TF模块。请务必测试您的代码,并确保没有任何逻辑错误。
  5. 蓝牙配对:请确保您的手机已成功与HC-02蓝牙模块配对。检查手机上的蓝牙设置,查看是否可以找到并连接到HC-02模块。
  6. 手机应用:如果您使用的是自定义的手机应用,请确保应用能正确发送蓝牙指令到HC-02模块。测试应用程序以确保数据发送功能正常工作。

如果以上步骤都已检查并确认无误,但仍然没有反应,请考虑以下建议:

  1. 使用示波器或逻辑分析仪检查HC-02模块和STM32C8T6之间的通信,以确保数据在硬件之间正确传输。
  2. 检查HC-02模块和JQ8400-TF模块是否正常工作。尝试使用已知的工作代码和硬件测试这些模块,以排除硬件故障的可能性。
  3. 考虑咨询开发板或模块制造商的技术支持,或参考相关的技术文档,以获得针对您特定硬件的专业建议。