学习ESP8266④基于STM32的开发实例

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41684249/article/details/82764477

ESP8266基于STM32的开发实质上就是AT开发,这里以ESP8266连接路由器为例,为了证明是否连接上了,这里我是开手机热点来验证的。当然,你也可以ESP8266作为AP热点,这样可能现象更明显,只要配置成功了,打开手机WiFi,就会出现ESP8266的AP。由于开始就是以连接路由为例写的程序,所以这里就用这个例子讲解。
首先,需要知道AT指令如何配置入网,代码如下

AT+CWMODE=3
AT+RET
AT+CWJAP="这里填WiFi名字","这里填密码"

STM32和WIFI之间的通信原理实质上就是通过串口通讯,单片机通过串口发送AT指令给ESP8266,从而实现通讯。
我这里用的是正点原子的探索者,串口用的是串口三(PB10,PB11),直接在实验四串口实验上进行写程序,程序会以网盘形式放在最后
这里,我将上面三条指令进行HEX显示(又叫十六进制显示),从而得到如下代码

u8 at_cwmode[] = {0x00,0x41,0x54,0x2B,0x43,0x57,0x4D,0x4F,0x44,0x45,0x3D, 
                  0x33,0X0D,0x0A};  
u8 at_rst[] = {0x41, 0x54, 0x2B, 0x52, 0x53, 0x54, 0x0D, 0x0A};
u8 at_cwjap[]={0x41,0x54,0x2B,0x43,0x57,0x4A,0x41,0x50,0x3D,0x22,0x68,0x6F,0x6E,0x6F,0x72,0x39,
               0x22,0x2C,0x22,0x6D,0x6C,0x64,0x31,0x32,0x33,0x34,0x35,0x36,0x22,0x0D,0x0A};

之后直接进入主函数,就是通过串口发送这三条指令

int main(void)
{ 
	u8 t=0;
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);		//延时初始化 
	uart_init(115200);	//串口初始化波特率为115200
	usart3_init(115200);
	LED_Init();		  		//初始化与LED连接的硬件接口 
	delay_ms(1000);
	for(t=0;t<14;t++)
	{
		USART_SendData(USART3, at_cwmode[t]);         //向串口3发送数据
		while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待发送结束
	}
	delay_ms(1000);

	for(t=0;t<8;t++)
	{
		USART_SendData(USART3, at_rst[t]);         //向串口3发送数据
		while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待发送结束
	}
	delay_ms(1000);
	
	for(t=0;t<31;t++)
	{
		USART_SendData(USART3, at_cwjap[t]);         //向串口3发送数据
		while(USART_GetFlagStatus(USART3,USART_FLAG_TC)!=SET);//等待发送结束
	}
	delay_ms(1000);
	while(1)
	{
		
	}
}

程序:链接:https://pan.baidu.com/s/1uKPKYFmz9Ccve46MBTUfwQ 提取码:ht1w
说说开发的时候遇到的问题
1.起初我没有加AT+RST重启,因为我在操作AT指令的时候不加该步也能配网成功,然而在STM32开发时,发现并不行。
2.我是自己写了个串口三,并没有用串口一,在照串口一移植之后,本以为不需要串口中断,然后就发现只能发,不能收,然后看了下串口中断的函数,发现这是为了验证数据是否发送完全,如果没有的话,程序就会一直卡着不走。
3.起初串口打印信息看看发的AT指令完不完整的时候,发现永远打印不出开头第一个A,后面的几句都正常,所以我在最前面加了个0x00把长度增加一个得以解决。

展开阅读全文
博主设置当前文章不允许评论。

没有更多推荐了,返回首页