JacksonChen 发表于 2024-11-21 10:58

HC32L110C6UA和XY-MBO21F蓝牙芯片的通讯问题

使能HC32L110C6UA的串口1与XY-MBO21F进行通讯,与蓝牙连接的手机app能够进行printf的输出打印,但是发送AT指令时蓝牙模块没有响应,请教一下大家是什么原因导致的?

int32_t main(void)
{
       
    My_Uart_Init();
        delay100us(10);
       
        printf("\r\napp start!\r\n");
        delay100us(500);
       
    while(1)
        {
                Parse_Cmd();
                delay1ms(500);
        }
}

en_result_t My_Uart_Init(void)
{
        uint16_t timer=0;
    uint32_t pclk=0;
       
    stc_uart_config_tstcConfig;        //定义串口结构体
    stc_uart_irq_cb_t stcUartIrqCb;        //串口中断回调函数结构体
    stc_uart_multimode_t stcMulti;        //串口多主机模式函数结构体
    stc_uart_baud_config_t stcBaud;        //波特率配置结构体
    stc_bt_config_t stcBtConfig;        //基本定时器配置结构体
       
        uart_rx_head = uart_rx_tail = 0;
        memset(u8RxData , 0 , sizeof(u8RxData));
   
        //清空数据函数
    DDL_ZERO_STRUCT(stcUartIrqCb);
    DDL_ZERO_STRUCT(stcMulti);
    DDL_ZERO_STRUCT(stcBaud);
    DDL_ZERO_STRUCT(stcBtConfig);
       
        Gpio_InitIOExt(2,3,GpioDirOut,TRUE,FALSE,FALSE,FALSE);        //配置23引脚为输出模式TX
    Gpio_InitIOExt(2,4,GpioDirIn,TRUE,FALSE,FALSE,FALSE);        //配置24引脚为输入模式RX
   
    //通道端口配置
    Gpio_SetFunc_UART1TX_P23();
    Gpio_SetFunc_UART1RX_P24();

    //外设时钟使能
    Clk_SetPeripheralGate(ClkPeripheralBt,TRUE);//模式0/2可以不使能
    Clk_SetPeripheralGate(ClkPeripheralUart1,TRUE);

    stcUartIrqCb.pfnRxIrqCb = RxIntCallback;
    stcUartIrqCb.pfnTxIrqCb = NULL;
    stcUartIrqCb.pfnRxErrIrqCb = ErrIntCallback;
       
    stcConfig.pstcIrqCb = &stcUartIrqCb;
    stcConfig.bTouchNvic = TRUE;
        stcConfig.enRunMode = UartMode1;//测试项,更改此处来转换4种模式测试
    stcMulti.enMulti_mode = UartNormal;//测试项,更改此处来转换多主机模式,mode2/3才有多主机模式
    stcConfig.pstcMultiMode = &stcMulti;

    stcBaud.bDbaud = 0u;//双倍波特率功能
    stcBaud.u32Baud = 9600u;//更新波特率位置
    stcBaud.u8Mode = UartMode1;//计算波特率需要模式参数 ----------- 模式选择这里就是配置数据位、停止位和校验位 8个数据位、1个停止位和无校验位
    pclk = Clk_GetPClkFreq();
    timer = Uart_SetBaudRate(UARTCH1,pclk,&stcBaud);

    stcBtConfig.enMD = BtMode2;
    stcBtConfig.enCT = BtTimer;
    Bt_Init(TIM1, &stcBtConfig);//调用basetimer1设置函数产生波特率
    Bt_ARRSet(TIM1,timer);
    Bt_Cnt16Set(TIM1,timer);
    Bt_Run(TIM1);

    Uart_Init(UARTCH1, &stcConfig);
    Uart_EnableIrq(UARTCH1,UartRxIrq);
    Uart_ClrStatus(UARTCH1,UartRxFull);
    Uart_EnableFunc(UARTCH1,UartRx);
       
        delay100us(100);
       
        return Ok;
}

//处理串口指令函数
void Parse_Cmd(void)
{
        uint8_t tmp_buf = {0};
       
        //接收完成才处理
        if(u8Rx**)
        {
                //控制AT命令
                if(strstr((char *)u8RxData , "AT+"))
                {
                        if(strstr((char *)u8RxData , "VER?"))//查询固件版本号
                        {
                                sprintf((char *)tmp_buf , "Firmware version number:%s" , u8RxData);
                                Usart1_Puts((char *)tmp_buf);
                        }
                        else if(strstr((char *)u8RxData , "REBOOT=1"))//复位指令
                        {
                                sprintf((char *)tmp_buf , "Reboot succeed!");
                                Usart1_Puts((char *)tmp_buf);
                        }
                }
                else//非法命令
                {
                        sprintf((char *)tmp_buf , "Unknown command = %s\r\n" , u8RxData);
                        Usart1_Puts((char *)tmp_buf);
                }
               
                //清理缓冲区和标志
                memset((char *)u8RxData , 0 , sizeof(u8RxData));
                u8Rx** = 0;
                uart_rx_head = 0;
                uart_rx_tail = 0;
        }
}

JacksonChen 发表于 2024-11-21 11:01

手机蓝牙app的数据接收如图所示:
页: [1]
查看完整版本: HC32L110C6UA和XY-MBO21F蓝牙芯片的通讯问题