欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

STM32 HAL库--串口的DMA(发送、接收)和esp8266 wifi模组发送和接收封装函数

发布时间:2025/4/16 编程问答 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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模组发送和接收封装函数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。