一、硬件及软件准备
STM32F103ZE开发板,eps8266, st-link驱动 ,串口连接助手,keil5
二、如何获取网络时间
在已经连接到电脑wifi后(在后文),就可以网络时间进行获取。
理解时间数据应该是从uart串口中获得的,
void upload_data(void)
{
uint8_t *buf;
/* 接收来自ATK-MW8266D UART的一帧数据 */
buf = atk_mw8266d_uart_rx_get_frame();
if (buf != NULL)
{
printf("%s", buf);
strcpy(dataBuff,(const char*)buf);
/* 重开开始接收来自ATK-MW8266D UART的数据 */
atk_mw8266d_uart_rx_restart();
}
}
/**
* @brief 我的ATK-MW8266D发送AT指令
* @param cmd : 待发送的AT指令
* ack : 等待的响应
* timeout: 等待超时时间
* @retval ATK_MW8266D_EOK : 函数执行成功
* ATK_MW8266D_ETIMEOUT: 等待期望应答超时,函数执行失败
*/
void mycmd(char *cmd, char *ack, uint32_t timeout)
{
uint8_t *ret = NULL;
atk_mw8266d_uart_rx_restart();
atk_mw8266d_uart_printf("%s\r\n", cmd);
if ((ack == NULL) || (timeout == 0))
{
//return ATK_MW8266D_EOK;
}
else
{
while (1)
{
ret = atk_mw8266d_uart_rx_get_frame();
if (ret != NULL)
{
printf("%s",ret);
if (strstr((const char *)ret, ack) != NULL)
{
//printf("%s",strstr((const char *)ret, ack));
while(1){}
//return ATK_MW8266D_EOK;
}
else
{
atk_mw8266d_uart_rx_restart();
}
}
timeout--;
delay_ms(1);
}
//return ATK_MW8266D_ETIMEOUT;
}
}
/**
* @brief 计算时间
* @param 无
* @retval 无
*/
void computeTime(char* date)
{
int hour_offset=23;
int min_offset=26;
hour=(*(date+hour_offset)-'0')*10+(*(date+hour_offset+1)-'0');
min=(*(date+min_offset)-'0')*10+(*(date+min_offset+1)-'0');
hour+=8;
if(hour>=24)
{
hour-=24;
}
}
/**
* @brief 时间字符串
* @param 无
* @retval 无
*/
void Time(void)
{
time[0]=hour/10+'0';
time[1]=hour%10+'0';
time[3]=min/10+'0';
time[4]=min%10+'0';
}
/**
* @brief 刷新时间
* @param 无
* @retval 无
*/
void showTime(void)
{
Time();
lcd_show_string(100, 275, 220, 16, 16, time, BLUE);
printf("time:%s",time);
}
/**
* @brief 获取时间
* @param 无
* @retval 无
*/
void getTime(void)
{
uint8_t *ret = NULL;
char *strr=NULL;
char cmd[]="1";
char ack[]="Date";
atk_mw8266d_uart_rx_restart();
atk_mw8266d_uart_printf("%s\r\n", cmd);
delay_ms(100);
while (ret == NULL)
{
ret = atk_mw8266d_uart_rx_get_frame();
if (ret != NULL)
{
//printf("%s",ret);
strr=strstr((const char *)ret, ack) ;
if (strr != NULL)
{
computeTime(strr);
showTime();
/*Time();
lcd_show_string(100, 275, 220, 16, 16, time, BLUE);
printf("time:%s",time); */
//printf("%s",strstr((const char *)ret, ack));
//while(1){}
//return ATK_MW8266D_EOK;
}
else
{
atk_mw8266d_uart_rx_restart();
}
}
delay_ms(1);
}
/*
printf("%s",ret);
if(ret!=NULL)
{
strr=strstr((const char *)ret, ack) ;
if (strr != NULL)
{
computeTime(strr);
lcd_show_string(10, 155, 220, 32, 32, time, RED);
printf("time:%s",time);
//printf("%s",strstr((const char *)ret, ack));
//while(1){}
//return ATK_MW8266D_EOK;
}
else
{
atk_mw8266d_uart_rx_restart();
}
}*/
}
初始化内容
#include "./BSP/ATK_MW8266D/atk_mw8266d.h"
#include "./SYSTEM/delay/delay.h"
#include <string.h>
#include <stdio.h>
/*8266初始化*/
static void atk_mw8266d_hw_init(void)
{
GPIO_InitTypeDef gpio_init_struct;
ATK_MW8266D_RST_GPIO_CLK_ENABLE();
gpio_init_struct.Pin = ATK_MW8266D_RST_GPIO_PIN;
gpio_init_struct.Mode = GPIO_MODE_OUTPUT_PP;
gpio_init_struct.Pull = GPIO_NOPULL;
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(ATK_MW8266D_RST_GPIO_PORT, &gpio_init_struct);
}
/**
* @brief ATK-MW8266D复位
* @param ÎÞ
* @retval ÎÞ
*/
void atk_mw8266d_hw_reset(void)
{
ATK_MW8266D_RST(0);
delay_ms(100);
ATK_MW8266D_RST(1);
delay_ms(500);
}