ESP32 - UART 관련 참고 사항 - UART 사용시 주의 사항
ESP32의 UART
ESP32의 Hardware UART는 총 3개를 지원하며, 각 UART는 독립적으로 구성이 가능합니다.
UART0 : debug 포트로 사용, firmware 다운로드 기본 포트, 유져 정의로 사용 가능
UART1 : 유져 정의
UART2 : 유져 정의
UART에 대한 기본 내용은 아래에서 참고 가능합니다.
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/uart.html
UART 핀 변경
UART1 과 UART2 의 경우, GPIO중에서 아무 핀이나 할당하여 사용 가능합니다. 즉, Pin이 고정된게 아니고, IO Mux+GPIO Matrix를 통하여 유져가 원하는 Pin으로 할당 가능합니다.
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/uart.html#_CPPv412uart_set_pin11uart_port_tiiii
// Set UART pins(TX: IO4, RX: IO5, RTS: IO18, CTS: IO19)
ESP_ERROR_CHECK(uart_set_pin(UART_NUM_2, 4, 5, 18, 19));
** IO Mux / GPIO Matrix에 대하여는 아래 Technical reference의 Chapter 4 를 참조 하시기 바랍니다.
https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
여러개의 UART 사용시 주의 사항 (중요!)
Technical reference manual 의 UART편을 보면 아래와 같이 UART2는 reset 레지스터가 없다고 나옵니다.
즉, UART1을 reset이 UART2의 기능에 영향을 미친다고 나옵니다.
시험결과, UART1과 UART2가 동시에 Data전송을 하는 도중에, UART1을 reset하면, UART2도 reset이 되는 것과 같이 데이터 밀림 현상이 발생 합니다.
https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
UART 관련 예제 코드
ESP-IDF, Master branch의 UART 관련 예제 코드 입니다.
https://github.com/espressif/esp-idf/tree/master/examples/peripherals/uart
Software Serial 예제
정규 IDF에는 software serial 예제가 없고, 아래는 아두이노용 software serial 예제입니다.
https://github.com/plerup/espsoftwareserial
https://github.com/paulvha/ESP32/tree/master/softserial