STM32F4连接ESP8266无线通信(串口通信)
首先,本次用到两个串口。我使用的是普中STM32F407,第一个串口为USART1(PA2,PA3)串口一,就是数据线连接单片机和电脑时用的口。串口三USART3(PB10TX,PB11RX)在使用时,将原来在USB转TTL上的RX,TX线连接到PB10,PB11上,其他3.3v和GND也必须连接在开发板上。不需要再用AT指令更改,直接连下图线。前提是自己用的程序也是串口三的。
讲讲工作原理吧,开发板通过串口三发送AT指令程序,包含了使用USB转TTL时的所有AT指令,包括退出透传指令。统统发送。那么ESP8266收到这些AT指令后,会进行配置。等配置成功过后。就可以通过程序发送你想要发送的数据,你就可以大显身手可。那么你是不能像用USB转TTL一样,用串口调试助手来发送数据的切记。
下面看看要发送的哪些AT程序,串口配置的程序片段。
void esp8266_start_trans(void)
{
atk_8266_send_cmd("AT+CWMODE=1","OK",50);
atk_8266_send_cmd("AT+RST","ready",100);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
delay_ms(1000);
while(atk_8266_send_cmd("AT+CWJAP=\"123456\",\"88888888\"","WIFI GOT IP",800));
atk_8266_send_cmd("AT+CIPMUX=0","OK",20);
while(atk_8266_send_cmd("AT+CIPSTART=\"TCP\",\"192.168.43.5\",8086","OK",200));
atk_8266_send_cmd("AT+CIPMODE=1","OK",200);
atk_8266_send_cmd("AT+CIPSEND","ND",50);
}
这里面通过send_cmd将AT指令发送出去,来连接电脑的wifi和虚拟串口号。
下面是串口1配置。你要不是STM32F407板子是不能用这些程序的,因为GPIO口挂接的线都不一样`在这里插入代码片
串口3配置和串口1大同小异,就不增加长度了。
void uart_init(u32 bound){
//GPIO¶Ë¿ÚÉèÖÃ
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //ʹÄÜGPIOAʱÖÓ
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//ʹÄÜUSART1ʱÖÓ
//´®¿Ú1¶ÔÓ¦Òý½Å¸´ÓÃÓ³Éä
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9¸´ÓÃΪUSART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10¸´ÓÃΪUSART1
//USART1¶Ë¿ÚÅäÖÃ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9ÓëGPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸´Óù¦ÄÜ
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //ËÙ¶È50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //ÍÆÍ츴ÓÃÊä³ö
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //ÉÏÀ
GPIO_Init(GPIOA,&GPIO_InitStructure); //³õʼ»¯PA9£¬PA10
//USART1 ³õʼ»¯ÉèÖÃ
USART_InitStructure.USART_BaudRate = bound;//²¨ÌØÂÊÉèÖÃ
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×Ö³¤Îª8λÊý¾Ý¸ñʽ
USART_InitStructure.USART_StopBits = USART_StopBits_1;//Ò»¸öֹͣλ
USART_InitStructure.USART_Parity = USART_Parity_No;//ÎÞÆæżУÑéλ
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//ÎÞÓ²¼þÊý¾ÝÁ÷¿ØÖÆ
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //ÊÕ·¢Ä£Ê½
USART_Init(USART1, &USART_InitStructure); //³õʼ»¯´®¿Ú1
USART_Cmd(USART1, ENABLE); //ʹÄÜ´®¿Ú1
USART_ClearFlag(USART1, USART_FLAG_TC);
#if EN_USART1_RX
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//¿ªÆôÏà¹ØÖжÏ
//Usart1 NVIC ÅäÖÃ
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//´®¿Ú1ÖжÏͨµÀ
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//ÇÀÕ¼ÓÅÏȼ¶3
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //×ÓÓÅÏȼ¶3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀʹÄÜ
NVIC_Init(&NVIC_InitStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯VIC¼Ä´æÆ÷¡¢
#endif
}
下面看结果图片。
目前,没有再入手单片机方向了,联系方式先下了。
因为此次使用ESP8266是课程设计,并不是一时兴起,查看过其他很多人的博客,很多人写的总是每个结果。我初时甚至不知道程序下载后应该是什么结果,什么现象都不知道,因此耗费了很多时间。
各位朋友,打个赏,点个收藏,让更多的人看到
下一篇为使用ESP8266无线传输激光测距的数据。已经完全做完了,但是没有时间写,我会抽个空写的。