[ESP-IDF] UART

2024. 11. 13. 20:47·MCU/esp32

개발 IDE : ESP IDF (on vscode) 

개발 보드 : Lolin D32

 

0. 설명

ESP32에는 3개의 UART 채널이 있다. (UART0, UART1, UART2)

 

보통 UART0이 기본 UART 포트로 디버깅, 시리얼모니터 연결 등에 사용된다. 

 

예를 들어 아두이노에서 Serial.begin()과 같은 함수를 사용해서 시리얼 모니터에 문자를 출력하면 uart0 채널을 사용한 것이다. 

 

 

 

 

1. 코드

 

 

 

 

 

2. 코드설명

#include "driver/uart.h"

uart 관련 api include 

 

 

 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,
    };

uart 헤더파일을 살펴보면 uart_config_t라는 구조체가 선언되어 있는데. 여기서 uart 기본 설정들을 세팅할 수 있다. 

위 코드를 보면 baud rate는 115200, 데이터비트는 8비트, 패리티 X, stop bit1로 설정을 한 것을 볼 수 있다. 

flow_ctrl은  hardware flow control mode라고 추가 핀들을 사용해 보다 안정적으로 데이터 송수신을 하게끔 설정하는 것 같다. 사용하려면 추가적으로 핀을 사용해야 하는 듯. 

 

사용 안 할 거니 위와 같이 DISABLE 

 

 

uart_param_config(UART_NUM_0, &uart_config);

위 함수는 아까 uart_config_t에서 설정한 값들을 핸들러로 보내주는 함수다. 

uart0 채널을 사용하니 당연히 UART_NUM_0.

 

 

uart_driver_install(UART_NUM_0, 1024, 0, 0, NULL, 0);

ESP32의 uart 드라이버를 설치 및 초기화하는 함수이다. uart를 사용하려면 반드시 호출되어야 한다. 

파라미터는 순서대로

uart채널,  수신 버퍼 크기, 송신 버퍼 크기, uart포트에서 발생하는 event를 처리하는 queue 크기, event queue 핸들, 인터럽트 우선순위 및 플래그

 

void uart_task() {
    const char* message = "hello world!\n";
    while(1) {
        uart_write_bytes(UART_NUM_0, message, strlen(message));
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}

uart_write_bytes() 함수를 사용해 수신을 할 수 있다. 

파라미터들은 uart0 채널을 사용하니 UART_NUM_0, 보낼 데이터, 데이터 길이다.

 

 

 xTaskCreate(uart_task, "uart_task", 2048, NULL, 10, NULL);  // UART 출력 태스크 생성

메인 함수에 위와 같은 함수가 선언되어 있는 것을 볼 수 있는데, 이는 freeRTOS를 이용해 여러 tasks를 수행할 때, 멀티태스킹을 할 수 있게끔 구현해 놓은 함수다. 지금 예제에서는 굳이 할 필요는 없지만.. 

 

그냥 메인함수에 uart_write_bytes() 함수 넣어도 잘 작동된다.

'MCU > esp32' 카테고리의 다른 글

[ESP-IDF] WiFi  (0) 2024.12.31
[ESP-IDF] GPIO  (0) 2024.11.13
[ESP-IDF] 프로젝트 생성  (0) 2024.11.13
[ESP IDF] ninja: error: loading 'build.ninja  (1) 2024.11.12
[Arduino] esp8266 mqtt 프로토콜  (0) 2023.03.10
'MCU/esp32' 카테고리의 다른 글
  • [ESP-IDF] WiFi
  • [ESP-IDF] GPIO
  • [ESP-IDF] 프로젝트 생성
  • [ESP IDF] ninja: error: loading 'build.ninja
JaewonAhn
JaewonAhn
  • JaewonAhn
    JwAhn_Embedded
    JaewonAhn
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • MCU (21)
        • esp32 (6)
        • stm32 (15)
      • SW (30)
        • 백준 (27)
        • C, C++ (2)
        • 자료구조 (0)
        • 파이썬 (1)
      • Tool (2)
        • KiCAD (0)
        • Git (0)
        • Visual Studio Code (1)
        • CubeIDE (1)
      • Balancing robot (28)
        • HW (11)
        • FW&SW (2)
        • 일지 (13)
        • 이론공부 (1)
      • 1&2학년 (17)
        • 1학년(2021) (2)
        • 2학년(2022) (4)
        • [2022 03 ~ 09] IoT Project (8)
        • [2022 09 ~ 12] 융합 프로젝트 (3)
      • 2025(학부 3학년) (14)
        • 신호 및 시스템 (1)
        • 전자회로 (0)
        • 제어 및 AI 입문 (3)
        • 임베디드시스템 (8)
        • 기타 (2)
      • 잡솔 (3)
      • 군대 (7)
        • 이등병 (1)
        • 일병 (4)
        • 병장 (2)
      • Driving_Assistance_Device (14)
        • Hailo (7)
        • 일지 (3)
        • 기타 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    10845
    합성함수의 미분법
    headerfile
    스택
    nucelo
    WiFi.local() to char
    Arduino
    library
    9012
    2학년
    vscode
    10866
    plotly
    10828
    뇌절
    쇠막대기
    10799
    arudino
    이계도함수
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JaewonAhn
[ESP-IDF] UART
상단으로

티스토리툴바