esp32s3 idf uart串口通信demo

esp32s3 idf uart串口通信demo

gpio21低电平时出发发送串口信息

#include <stdio.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "driver/uart.h"
#include "esp_log.h"

#define TX_PIN    14
#define RX_PIN    48
#define TRIG_PIN  21

#define UART_PORT_NUM   UART_NUM_1
#define UART_BAUD_RATE  115200
#define BUF_SIZE        128

static const char *TAG = "uart_edge_trigger";

void app_main(void)
{
    // 配置触发引脚:输入 + 上拉(默认高)
    gpio_set_direction(TRIG_PIN, GPIO_MODE_INPUT);
    gpio_pullup_en(TRIG_PIN);

    // UART 初始化(同前)
    uart_config_t uart_config = {
        .baud_rate = UART_BAUD_RATE,
        .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_DEFAULT,
    };
    uart_param_config(UART_PORT_NUM, &uart_config);
    uart_set_pin(UART_PORT_NUM, TX_PIN, RX_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
    uart_driver_install(UART_PORT_NUM, 256, 0, 0, NULL, 0);

    ESP_LOGI(TAG, "System ready. Waiting for falling edge on GPIO21...");

    const char *msg = "cdtxw_duoji2\n";
    uint8_t rx_data[BUF_SIZE];
    int len;

    // 记录上一次的电平状态
    int last_level = gpio_get_level(TRIG_PIN); // 初始为高(1)

    while (1) {
        int current_level = gpio_get_level(TRIG_PIN);

        // 检测下降沿:上一次是高,当前是低
        if (last_level == 1 && current_level == 0) {
            // 可选:简单去抖(读取稳定低电平)
            vTaskDelay(pdMS_TO_TICKS(20)); // 20ms 去抖
            if (gpio_get_level(TRIG_PIN) == 0) { // 确认仍是低
                ESP_LOGI(TAG, "Falling edge detected! Sending data...");
                uart_write_bytes(UART_PORT_NUM, msg, strlen(msg));
            }
        }

        // 更新状态
        last_level = current_level;

        // 同时处理接收数据
        len = uart_read_bytes(UART_PORT_NUM, rx_data, BUF_SIZE - 1, pdMS_TO_TICKS(10));
        if (len > 0) {
            rx_data[len] = '\0';
            ESP_LOGI(TAG, "Received: %s", rx_data);
        }

        vTaskDelay(pdMS_TO_TICKS(5));
    }
}

 

posted @ 2026-01-08 19:46  txwtech  阅读(1)  评论(1)    收藏  举报