使能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_t stcConfig; //定义串口结构体
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[128] = {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;
}
}
|