stm32与esp8266串口通信代码
时间: 2023-09-09 19:07:10 浏览: 115
以下是STM32与ESP8266串口通信的示例代码:
```c
#include "stm32f4xx.h"
#include <string.h>
// 定义串口发送函数
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data)
{
while((USARTx->SR&0X40)==0); //等待上一次数据发送完成
USARTx->DR = Data; //发送数据到USART数据寄存器
}
// 定义串口接收函数
uint8_t USART_ReceiveData(USART_TypeDef* USARTx)
{
while((USARTx->SR&0X20)==0); //等待接收完成
return USARTx->DR; //返回接收到的数据
}
// 定义发送AT指令函数
void ESP8266_SendAT(char *cmd)
{
while(*cmd)
{
USART_SendData(USART2, (uint8_t)(*cmd++));
}
}
int main(void)
{
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //使能USART2时钟
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //PA2为USART2_TX,PA3为USART2_RX
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //设置为复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度为50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //设置推挽输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //设置为无上下拉
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); //将PA2复用为USART2_TX
GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); //将PA3复用为USART2_RX
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200; //波特率设置为115200
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(USART2, &USART_InitStructure); //初始化USART2
USART_Cmd(USART2, ENABLE); //使能USART2
char at_cmd[] = "AT\r\n"; //AT指令
ESP8266_SendAT(at_cmd); //发送AT指令
while(1)
{
if(USART_ReceiveData(USART2) == 'O') //等待ESP8266回复OK
{
if(USART_ReceiveData(USART2) == 'K')
{
char data[] = "Hello World!\r\n"; //发送数据
ESP8266_SendAT(data);
break;
}
}
}
while(1);
}
```
注意事项:
1. 在使用USART前,需要先使能相应的GPIO和USART的时钟。
2. 在GPIO初始化时,需要将对应的引脚配置为复用功能,并且选择相应的复用功能号。
3. 在USART初始化时,需要设置波特率、字长、停止位、校验位、数据流控制和收发模式等参数。
4. 在发送AT指令和数据时,需要使用USART_SendData函数发送数据。在接收ESP8266的回复时,需要使用USART_ReceiveData函数接收数据。
阅读全文