查看FR8016HA_Dev_V1.3开发板原理图.pdf 可以知道WiFi模块连接Uart1 下面是Rx与Tx的引脚PD4 和PD5
1593769155(1).jpg

我的硬件版本是V1.3,LCD与1.4有不同,要在lcd.c内
---display
-------lcd.c
注释#define DEV_V_1_4  (1)  //FR8016H DEV1.4
//#define DEV_V_1_4  (1)  //FR8016H DEV1.4
复制代码
首先初始化uart1
void esp8266_init()
  • {<span style="white-space:pre">        </span>
  • <span style="white-space:pre">        </span>system_set_port_pull(GPIO_PD4,true);
  • <span style="white-space:pre">        </span>system_set_port_mux(GPIO_PORT_D,GPIO_BIT_4,PORTD4_FUNC_UART1_RXD);
  • <span style="white-space:pre">        </span>system_set_port_mux(GPIO_PORT_D,GPIO_BIT_5,PORTD5_FUNC_UART1_TXD);
  • <span style="white-space:pre">        </span>uart_init(UART1,BAUD_RATE_115200);
  • <span style="white-space:pre">        </span>NVIC_EnableIRQ(UART1_IRQn);
  • };
  • 复制代码
    发送指令
    bool esp8266_sendCmd(char *cmd, char *reply, uint16_t wait)
  • {
  •   rxFram.length = 0; //Çå¿ÕÊý¾ÝÖ¡£¬ÖØнÓÊÕ
  •   uart1_printf("%s\r\n", cmd);
  •   if(reply == 0)
  •     return true;
  • <span style="white-space:pre">        </span>uart1_read((uint8_t *)rxFram.rxbuffer,UART1_RX_MAX_LEN,read_callback());
  •   return ((bool) strstr(rxFram.rxbuffer,reply));
  • }
  • //uart1发送
  • void uart1_printf(char* fmt,...)  
  • {
  •   char buffer[UART1_BUFFER_LEN+1];  
  • <span style="white-space:pre">        </span>uint16_t size;
  • <span style="white-space:pre">        </span>va_list ap;
  • <span style="white-space:pre">        </span>va_start(ap, fmt);
  • <span style="white-space:pre">        </span>vsprintf((char*)buffer, fmt, ap);
  • <span style="white-space:pre">        </span>va_end(ap);
  • <span style="white-space:pre">        </span>size = strlen((const char*)buffer);<span style="white-space:pre">        </span>
  • <span style="white-space:pre">        </span>uart_put_data_noint(UART1,(const uint8_t*)buffer,size);
  • }
  • <span style="white-space:pre">        </span>uart_int_callback read_callback()
  • {
  • <span style="white-space:pre">        </span>co_printf("%s\n",rxFram.rxbuffer);
  • };
  • 复制代码
    模式选择
    bool esp8266_modeChoose(ESP8266_ModeEnumDef mode)
  • {
  •   switch(mode)
  •   {
  •     case STA:
  •       return esp8266_sendCmd("AT+CWMODE=1", "OK", 1500);
  •     case AP:
  •       return esp8266_sendCmd("AT+CWMODE=2", "OK", 1500);
  •     case STA_AP:
  •       return esp8266_sendCmd("AT+CWMODE=3", "OK", 1500);
  •     default:
  •       return false;
  •   }
  • }
  • 复制代码
    建立AP
    bool esp8266_buildAP(char * pSSID, char * pPwd, ESP8266_ApPwdModeEnumDef pwdMode)
  • {
  •   char cmd[120];
  •   uart1_printf("AT+CWSAP="%s","%s",1,%d\n",pSSID, pPwd, pwdMode);
  •   return esp8266_sendCmd(cmd, "OK", 1000);
  • }
  • 复制代码
    下面是.h文件
  • #ifndef _ESP8266_DIRVER_H_
  • #define _ESP8266_DIRVER_H_
  • #include <stdint.h>
  • #include <string.h>
  • #include <stdarg.h>
  • #include <stdio.h>
  • #include "driver_uart.h"
  • #include "driver_system.h"
  • #include "sys_utils.h"
  • /******************************* ESP8266 Êý¾ÝÀàÐͶ¨Òå ***************************/
  • #define ESP8266_USART_BOUND  115200
  • #define UART1_RX_MAX_LEN  256
  • #define UART1_BUFFER_LEN 256
  • typedef enum{
  • <span style="white-space:pre">        </span>STA,
  •   AP,
  •   STA_AP  
  • } ESP8266_ModeEnumDef;
  • typedef enum{
  • <span style="white-space:pre">        </span>OPEN = 0,
  • <span style="white-space:pre">        </span>WEP = 1,
  • <span style="white-space:pre">        </span>WPA_PSK = 2,
  • <span style="white-space:pre">        </span>WPA2_PSK = 3,
  • <span style="white-space:pre">        </span>WPA_WPA2_PSK = 4,
  • } ESP8266_ApPwdModeEnumDef;
  • typedef struct
  • {
  •   char rxbuffer[UART1_RX_MAX_LEN];
  •   uint16_t length;
  •   bool finishFlag;
  • }RxFramTypeDef;
  • extern RxFramTypeDef rxFram;
  • typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
  • /******************************** ESP8266数据 ***********************************/
  • #define      ESP8266_CH_PD_CLK                             RCC_APB2Periph_GPIOB  
  • #define      ESP8266_CH_PD_PORT                            GPIOB
  • #define      ESP8266_CH_PD_PIN                             GPIO_Pin_13
  • #define      ESP8266_RST_CLK                               RCC_APB2Periph_GPIOB
  • #define      ESP8266_RST_PORT                              GPIOB
  • #define      ESP8266_RST_PIN                               GPIO_Pin_14
  • #define   ESP8266_BUILD_AP_SSID         "ESP8266"      //要建立的热点名称
  • #define   ESP8266_BUILD_AP_ECN          (ESP8266_ApPwdModeEnumDef)4               //热点加密方式
  • #define   ESP8266_BUILD_AP_PWD           "12345678"         //密码
  • void esp8266_init(void);
  • bool esp8266_sendCmd(char *cmd, char *reply, uint16_t wait);
  • bool esp8266_buildAP(char * pSSID, char * pPwd, ESP8266_ApPwdModeEnumDef pwdMode);
  • bool esp8266_modeChoose(ESP8266_ModeEnumDef mode);
  • void uart1_printf(char* fmt,...);
  • uart_int_callback read_callback();
  • #endif
  • 复制代码
    在simple_peripheral_init()函数内添加        esp8266_init();初始化
    之后在一处任务场景添加
            esp8266_modeChoose(AP);
            esp8266_buildAP(ESP8266_BUILD_AP_SSID,ESP8266_BUILD_AP_PWD,ESP8266_BUILD_AP_ECN);

    之后能成功看到名为ESP8266的WIFI啦
    1594470847(1).jpg



    好像我没有完成接受功能 我怀疑是我的wifi模块坏了 我换个新模块下次再试


    总结:这个lcd屏的设计很棒啊

    例程少了,SDK文档的提示也不多,遇到一些新操作的时候就看不懂了。


    总之感谢官方