以下是一个简单的在ESP32上使用纯C语言通过UART串口输出"Hello, World!"的完整代码示例。此示例假设您使用的是ESP-IDF开发框架
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/uart.h"
#include "esp_log.h"
#include <string.h>
#include "driver/gpio.h"
#define UART_NUM UART_NUM_1 // 使用UART1
#define TXD_PIN (GPIO_NUM_17) // 发送数据的引脚
#define RXD_PIN (GPIO_NUM_16) // 接收数据的引脚(本例中未使用)
void init_uart() {
const uart_config_t uart_config = {
.baud_rate = 115200, // 波特率
.data_bits = UART_DATA_8_BITS, // 数据位
.parity = UART_PARITY_DISABLE, // 无奇偶校验
.stop_bits = UART_STOP_BITS_1, // 停止位
.flow_ctrl = UART_HW_FLOWCTRL_DISABLE, // 无流控制
.source_clk = UART_SCLK_APB, // 使用APB时钟源
};
// 配置UART参数
uart_param_config(UART_NUM, &uart_config);
// 设置UART引脚
uart_set_pin(UART_NUM, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
// 安装UART驱动程序
uart_driver_install(UART_NUM, 1024 * 2, 0, 0, NULL, 0);
}
void app_main() {
// 初始化UART
init_uart();
// 要发送的字符串
const char* message = "Hello, World!\n";
while (1) {
// 发送字符串到串口
uart_write_bytes(UART_NUM, message, strlen(message));
// 延时1秒
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
此程序已成功刷入esp32模块
代码解释
-
包含头文件:
freertos/FreeRTOS.h
和freertos/task.h
用于FreeRTOS任务管理,driver/uart.h
用于UART驱动,esp_log.h
用于日志记录。 -
定义宏:定义了使用的UART端口号(
UART_NUM_1
)、发送引脚(TXD_PIN
)和接收引脚(RXD_PIN
)。可以根据需要更改引脚配置。 -
初始化UART:
- 配置UART参数(波特率、数据位、奇偶校验、停止位等)。
- 设置UART的引脚。
- 安装UART驱动程序。
-
app_main
函数:这是ESP-IDF项目的入口点。- 初始化UART。
- 定义要发送的字符串“Hello, World!\n”。
- 进入一个无限循环,每秒通过UART发送字符串。
注意事项
- 请根据您的开发板或模块的引脚布局,调整
TXD_PIN
和RXD_PIN
的定义。 - 确保ESP-IDF环境已正确设置,并且板子的UART端口与PC连接,以便在终端上看到输出。
如果有其他问题或需要进一步的说明,请随时告诉我!
∥--------
根据chatgpt这个模板,感觉esp32 就是一个带操作系统的pc.
下一部就用esp32控制温湿度传感器,读取数据在数码管显示。