#include "main.h"#include "stdio.h"#include "string.h"UART_HandleTypeDef huart1;GPIO_InitTypeDef GPIO_InitStruct;void LED_Control(uint8_t state) { HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, state);}void USART1_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); }}void MX_GPIO_Init(void) { GPIO_InitStruct.Pin = LED_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);}void AT_SendCommand(char *cmd, char *response) { uint8_t buffer_rx[100]; uint8_t buffer_tx[100]; memset(buffer_rx, 0, sizeof(buffer_rx)); memset(buffer_tx, 0, sizeof(buffer_tx)); sprintf((char *)buffer_tx, "%s\r\n", cmd); HAL_UART_Transmit(&huart1, buffer_tx, strlen((char *)buffer_tx), 1000); HAL_UART_Receive(&huart1, buffer_rx, sizeof(buffer_rx), 5000); if (strstr((char *)buffer_rx, response) == NULL) { printf("AT Command Failed: %s", response); }}int main(void) { HAL_Init(); USART1_Init(); MX_GPIO_Init(); char buffer_rx[100]; memset(buffer_rx, 0, sizeof(buffer_rx)); AT_SendCommand("AT", "OK"); AT_SendCommand("AT+CWMODE=1", "OK"); AT_SendCommand("AT+CWJAP=\"ssid\",\"password\"", "OK"); while (1) { AT_SendCommand("AT+CIPSTART=\"TCP\",\"server_ip\",80", "OK"); AT_SendCommand("AT+CIPSEND=4", ">"); AT_SendCommand("test", "SEND OK"); HAL_Delay(1000); }}
时间: 2024-04-27 09:25:22 浏览: 195
linux_s3c2410_gpio.rar_GPIO_GPIO linux _gpio 2410_linux gpio_s3c
/*
* 这是一个使用STM32和ESP8266模块实现的简单的TCP连接的程序
* 实现的功能是通过ESP8266模块连接到指定的Wi-Fi网络,并连接到指定的IP地址和端口号的TCP服务器
* 然后发送一个字符串"test",并等待1秒,然后再次发送
*
* 包含的头文件:
* main.h - 包含了所需的头文件和宏定义
* stdio.h - 包含了printf函数
* string.h - 包含了字符串处理函数
*
* 使用的外设:
* USART1 - 与ESP8266模块通信使用
* GPIO - 控制LED灯
*
* 函数列表:
* LED_Control - 控制LED灯状态的函数
* USART1_Init - 初始化USART1外设的函数
* MX_GPIO_Init - 初始化GPIO外设的函数
* AT_SendCommand - 向ESP8266模块发送AT指令并等待响应的函数
* main - 主函数
*/
#include "main.h"
#include "stdio.h"
#include "string.h"
UART_HandleTypeDef huart1;
GPIO_InitTypeDef GPIO_InitStruct;
// 控制LED灯状态的函数
void LED_Control(uint8_t state) {
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, state);
}
// 初始化USART1外设的函数
void USART1_Init(void) {
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK) {
Error_Handler();
}
}
// 初始化GPIO外设的函数
void MX_GPIO_Init(void) {
GPIO_InitStruct.Pin = LED_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct);
}
// 向ESP8266模块发送AT指令并等待响应的函数
void AT_SendCommand(char *cmd, char *response) {
uint8_t buffer_rx[100];
uint8_t buffer_tx[100];
memset(buffer_rx, 0, sizeof(buffer_rx));
memset(buffer_tx, 0, sizeof(buffer_tx));
// 将AT指令写入发送缓冲区
sprintf((char *)buffer_tx, "%s\r\n", cmd);
HAL_UART_Transmit(&huart1, buffer_tx, strlen((char *)buffer_tx), 1000);
// 等待接收响应
HAL_UART_Receive(&huart1, buffer_rx, sizeof(buffer_rx), 5000);
// 判断响应中是否包含预期的字符串
if (strstr((char *)buffer_rx, response) == NULL) {
printf("AT Command Failed: %s", response);
}
}
int main(void) {
HAL_Init();
USART1_Init();
MX_GPIO_Init();
char buffer_rx[100];
memset(buffer_rx, 0, sizeof(buffer_rx));
// 发送AT指令连接到Wi-Fi网络
AT_SendCommand("AT", "OK");
AT_SendCommand("AT+CWMODE=1", "OK");
AT_SendCommand("AT+CWJAP=\"ssid\",\"password\"", "OK");
while (1) {
// 发送AT指令连接到指定IP地址和端口号的TCP服务器
AT_SendCommand("AT+CIPSTART=\"TCP\",\"server_ip\",80", "OK");
// 发送AT指令设置要发送的字节数
AT_SendCommand("AT+CIPSEND=4", ">");
// 发送要发送的字符串
AT_SendCommand("test", "SEND OK");
// 延时1秒
HAL_Delay(1000);
}
}
阅读全文