STM32 HAL库--串口的DMA(发送、接收)和esp8266 wifi模组发送和接收封装函数
编写日期:2018年8月25日
/*
*********************************************************************************************************
* 函 数 名: wifi_ack_check
* 功能说明: 串口初始化函数
* 形 参: ack
* 返 回 值: TRUE\FALSE
* 版 本 号: V01
*********************************************************************************************************
*/
uint8_t wifi_ack_check(uint8_t* ack)
{
if(usart3_recv_end_flag == 1){
usart3_recv_end_flag = 0;
if(strstr((const char *)usart3_rx_buf,(const char*)ack)){
rs485_send(usart3_rx_buf,usart3_rx_len);
usart3_rx_len = 0;
memset(usart3_rx_buf,0,DATA_BUFFER_SIZE);
return TRUE; //返回TRUE说明wifi模组已有应答
}
}
return FALSE; //返回FALSE说明wifi模组没有应答
}
/*
*********************************************************************************************************
* 函 数 名: wifi_ack_check
* 功能说明: 串口初始化函数
* 形 参: ack
* 返 回 值: TRUE\FALSE
* 版 本 号: V01
*********************************************************************************************************
*/
uint8_t send_wifi_cmd(uint8_t *cmd,uint8_t *ack,uint8_t waittime) //单片机给wifi模组发送AT指令
{
DMA_usart3_send(cmd,sizeof(cmd));
delay_ms(waittime);
if(wifi_ack_check(ack)){
return TRUE; //返回TRUE说明wifi模组已有应答
}
return FALSE; //返回FALSE说明wifi模组没有应答
}
修改日期:2018年8月30日
修改内容:修改以上 uint8_t send_wifi_cmd(uint8_t *cmd,uint8_t *ack,uint8_t waittime)
修改原因:不能用sizeof来求指针变量的数据长度,数组把首地址赋予指针变量,指针只是指向一个数组的首地址,切记!
只有先把数组的数据长度求出来,再作为实参传递给函数。
修改如下:
/*
*********************************************************************************************************
* 函 数 名: wifi_ack_check
* 功能说明: 串口初始化函数
* 形 参: ack
* 返 回 值: TRUE\FALSE
* 版 本 号: V02
*********************************************************************************************************
*/
uint8_t send_wifi_cmd(uint8_t *cmd,uint8_t len,uint8_t *ack,uint8_t waittime) //单片机给wifi模组发送AT指令
{
DMA_usart3_send(cmd,len);
delay_ms(waittime);
if(wifi_ack_check(ack)){
return TRUE; //返回TRUE说明wifi模组已有应答
}
return FALSE; //返回FALSE说明wifi模组没有应答
}
运用如下:
#define DATALEN(BUF) (sizeof(BUF)/sizeof(*BUF)) //定义一个求字符数组数据长度的宏
send_wifi_cmd((uint8_t *)"AT+RST\r\n",DATALEN("AT+RST\r\n")-1,"OK",50); //函数调用
总结
以上是生活随笔为你收集整理的STM32 HAL库--串口的DMA(发送、接收)和esp8266 wifi模组发送和接收封装函数的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: STM32 HAL库 串口DMA(收发)
- 下一篇: esp8266烧写机智云固件方法