이 블로그는 임베디드 컴퓨터를 이용한 장치(시스템) 개발과 원격제어에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Microchip 사의 ATmega128를 사용한 보드와 Arduino Mega 보드(ATmega2560), Raspberry Pi Pico, Raspberry Pi, WiFi 모듈을 사용 합니다.

uart-pico-c

Pi Pico UART - C/C++ SDK
Raspberry Pi Pico UART - C/C++ SDK


  • Raspberry Pi Pico UART
    • UART 개요
      • 참고자료: "RP2040 A microcontroller by Raspberry Pi" 4.2.UART

      • RP2040의 UART
        • RP2040에는 ARM Primecell UART(PL011)(Revision r1p5)를 기반으로 하는 2개의 동일한 UART가 있다.
        • 각 UART는 다음 기능을 지원한다.
          • 분리된 32x8 Tx 와 32x12 Rx FIFO Buffer
          • clk_peri에 의하여 Clock 되는 Programmable baud rate generator
          • 전송시 자동으로 삽입되고 수신시 자동으로 제거되는 Standard asynchronous communication bits(start, stop, parity)
          • Line break detection
          • Programmable serial interface(5, 6, 7, or 8 bits)
          • 1 or 2 stop bits
          • Programmable hardware flow control
        • 각 UART는 GPIO muxing 테이블에 정의된 여러 GPIO 핀에 연결할 수 있다.
        • 참고자료: Raspberry Pi Pico Pinout

      • UART 가 실행하는 중요 기능
        • 주변 장치에서 수신한 직렬 데이터를 병렬로 변환한다.
        • 주변 장치로 전송하는 병렬 데이터를 직렬로 변환한다.
        • CPU는 AMBA APB 인터페이스를 통해 데이터 및 제어/상태 정보를 읽고 쓴다.
        • 송신 및 수신 데이터는 내부 FIFO 메모리로 버퍼링되어 송신 및 수신 모드에서 최대 32바이트를 독립적으로 저장할 수 있다.
        • UART 내부 기준 클럭 입력(UARTCLK)에서 송신 및 수신에 공통으로 사용하는 클럭을 생성하는 프로그래밍 가능한 Baud rate generator가 포함되어 있다.
        • 업계 표준 16C650 UART 장치와 유사한 기능을 제공한다.
        • UART 모드에서 최대 921600bps 속도를 지원한다.
        • 수신(타임아웃 포함), 전송, 모뎀 상태 및 오류 조건이 발생할 경우 개별적으로 마스크 가능한 인터럽트를 발생 시킨다.
        • DMA(Direct Memory Access) 컨트롤러와 인터페이스하기 위한 DMA 요청 신호를 발생 시킨다.
        • 수신 중에 프레임, 패리티 또는 중단 오류가 발생하면 적절한 오류 비트가 설정되고 FIFO에 저장된다.
        • 만약 Overrun condition이 발생하면 Overrun 레지스터 비트가 즉시 설정되고 FIFO에 데이터가 덮어쓰기 되지 않는다.
      • UART block diagram과 중요 기능
        • UART block diagram

        • AMBA APB interface
          • AMBA APB 인터페이스는 상태/제어 레지스터 와 송수신 FIFO의 액세스를 위한 읽기 및 쓰기 디코드 신호를 생성한다.
        • Register block
          • Register block은 AMBA APB 인터페이스를 통해 기록되거나 읽을 데이터(UART 제어와 기능 수행에 필요한 데이터)를 저장한다.
        • Baud rate generator
          • Baud rate generator에는 내부 클럭(Baud16 및 IrLPBaud16 신호)을 생성하는 free-running counters가 포함되어 있다. Baud16은 UART 송수신 제어를 위한 타이밍 정보를 제공한다. Baud16은 baud rate의 16배의 주파수를 갖는 펄스 스트림이다.
        • Transmit FIFO
          • Transmit FIFO는 8비트 너비에 32개 깊이의 FIFO 메모리 버퍼이다. CPU에서 작성된 데이터는 전송 로직에서 읽을 때까지 FIFO에 저장된다. 전송 FIFO를 비활성화하여 1바이트만 저장하는 레지스터 처럼 작동하게 할 수 있다.
        • Receive FIFO
          • Receive FIFO는 12비트 너비에 32개 깊이의 FIFO 메모리 버퍼이다. 수신된 데이터와 해당 오류 비트는 APB 인터페이스를 통해 CPU가 읽을 때까지 수신 로직을 통해 수신 FIFO에 저장된다. 수신 FIFO를 비활성화하여 1바이트만 저장하는 레지스터 처럼 작동하게 할 수 있다.
        • Transmit logic
          • Transmit logic은 전송 FIFO에서 읽은 데이터에 대해 병렬-직렬 변환을 수행한다. 제어 로직은 시작 비트로 시작하는 직렬 비트 스트림을 먼저 출력하고, 최하위 비트(LSB)로 시작하는 데이터 비트를 먼저 출력한 다음, 패리티 비트를 차례로 출력하고, 제어 레지스터에서 프로그래밍된 구성에 따라 정지 비트를 출력한다.
        • Receive logic
          • Receive logic은 유효한 시작 펄스가 감지된 후 수신된 비트 스트림에 대해 직렬-병렬 변환을 수행한다. 오버런, 패리티, 프레임 오류 검사 및 라인 중단 감지도 수행되며, 이러한 상태는 수신 데이터에 추가되어 FIFO에 저장된다.
        • Interrupt generation logic
          • 개별 마스크 설정이 가능한 인터럽트는 UART에 의해 생성된다. 개별 인터럽트 요청은 OR 함수로 결합되어 생성되며 프로세서 인터럽트 컨트롤러에 연결된다.
        • DMA interface
          • UART는 DMA 컨트롤러에 연결하는 인터페이스를 제공(Section 4.2.5 UART DMA Interface 참고요)한다.

  • 자주 사용하는 UART 관련 함수 - C/C++ SDK
    • UART의 초기화와 기능을 설정하는 함수
      • uart_init: UART를 초기한다. UART를 사용하기 전에 실행하여야 한다.
        • 기본형: uint uart_init (uart_inst_t *uart, uint baudrate)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • baudrate: UART의 Baudrate
        • Returns: 실제 설정된 Baudrate
      • uart_deinit: UART의 초기화를 해제한다. 다시 사용하려면 다시 초기화해야 한다.
        • 기본형: void uart_deinit (uart_inst_t *uart)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
      • uart_set_baudrate: UART Baud rate를 설정한다. 설정 요구 값에 최대한 가깝게 Baud rate를 설정하고 설정된 실제 속도를 반환한다.
        • 기본형: uint uart_set_baudrate (uart_inst_t *uart, uint baudrate)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • baudrate: UART의 Baudrate
        • Returns: 실제 설정된 Baudrate.
      • uart_set_fifo_enabled: 지정된 UART의 FIFO를 활성화/비활성화 한다.
        • 기본형: static void uart_set_fifo_enabled (uart_inst_t *uart, bool enabled)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • enabled: FIFO를 사용하려면 true(default), 사용하지 않으려면 false
      • uart_set_format: UART 데이터 형식을 설정한다.
        • 기본형: static void uart_set_format (uart_inst_t *uart, uint data_bits, uint stop_bits, uart_parity_t parity)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • data_bits: 데이터 비트 수(5..8)
          • stop_bits: Stop bits 수(1..2)
          • parity: Parity option
      • uart_set_irq_enables: UART 인터럽트를 설정한다. 이 함수를 호출하기 전에 인터럽트 핸들러를 설정해야 한다.
        • 기본형: static void uart_set_irq_enables (uart_inst_t *uart, bool rx_has_data, bool tx_needs_data)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • rx_has_data: true로 설정하면 RX FIFO에 데이터가 되면 인터럽트가 발생한다.
          • tx_needs_data: true로 설정하면 TX FIFO에 데이터가 필요할 때 인터럽트가 발생한다.

          참고자료: 인터럽트 핸들러 설정에 대한 자료는 "Raspberry Pi Pico C/C++ SDK" 4.1.14. hardware_irq를 참고하기 바람.

      • uart_set_translate_crlf: true로 설정되면 UART에서 데이터 전송 시 CR Code에 LF를 추가한다.
        • 기본형: void uart_set_translate_crlf (uart_inst_t *uart, bool translate)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • translate: true로 설정하면 전송 시 LF(Line feeds)를 CR(Carriage return) Code에 추가한다.
    • 읽기(Read) 기능을 수행하는 함수
      • uart_getc: UART에서 한 문자를 읽는다. 이 기능은 문자를 읽을 때까지 기다린다.
        • 기본형: static char uart_getc (uart_inst_t *uart)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
        • Returns: 읽은 문자(Character)
      • uart_read_blocking: UART에서 지정된 수의 문자를 읽는다. 이 기능은 지정된 수의 문자가 수신될 때까지 기다린다.
        • 기본형: static void uart_read_blocking (uart_inst_t *uart, uint8_t *dst, size_t len)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • dst: 수신되는 문자를 저장하는 Buffer
          • len: 수신되어야 하는 문자(Bytes) 수
    • 쓰기(Write) 기능을 수행하는 함수
      • uart_putc: 전송하기 위해 단일 문자를 UART에 쓴다(Optional CR/LF 변환). 이 기능은 문자 전송를 완료할 때까지 기다린다.
        • 기본형: static void uart_putc (uart_inst_t *uart, char c)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • c: 전송할 문자
      • uart_putc_raw: 전송하기 위해 단일 문자를 UART에 쓴다. 이 기능은 문자 전송를 완료할 때까지 기다린다.
        • 기본형: static void uart_putc_raw (uart_inst_t *uart, char c)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • c: 전송할 문자
      • uart_puts: 전송을 위해 문자열을 UART에 쓰고 CR/LF 변환을 수행한다. 이 기능은 문자 전송를 완료할 때까지 기다린다.
        • 기본형: static void uart_puts (uart_inst_t *uart, const char *s)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • s: 전송할 문자열(Null terminated string)
    • UART의 상태(값)을 확인하는 함수
      • uart_is_readable: RX FIFO에 읽을 수 있는 데이터가 대기 중인지 확인한다.
        • 기본형: static bool uart_is_readable (uart_inst_t *uart)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
        • Returns: 사용 가능한 데이터가 없으면 0, 그렇지 않으면 읽을 수 있는 바이트 수
      • uart_is_readable_within_us: RX FIFO가 데이터가 저장될 때까지 일정(uSec) 시간 기다린다.
        • 기본형: bool uart_is_readable_within_us (uart_inst_t *uart, uint32_t us)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • us: 최대 대기 시간(마이크로초)을 사용한다. 대기 시간이 0일 수 있다.
        • Returns: RX FIFO가 시간 초과 전에 비어 있지 않으면 true를 Retuen 하고, 그렇지 않으면 false를 Retuen 한다.
      • uart_is_writable: TX FIFO에 사용 가능한 공간이 있는지 확인한다.
        • 기본형: static bool uart_is_writable (uart_inst_t *uart)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
        • Returns: 사용 가능한 공간이 있으면 true를 Retuen 하고, 그렇지 않으면 false를 Retuen 한다.
      • uart_tx_wait_blocking: UART TX fifo에 데이터를 쓸 수 있을 때까지 기다린다.
        • 기본형: static void uart_tx_wait_blocking (uart_inst_t *uart)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
      • uart_write_blocking: 전송을 위해 UART에 데이터를 쓴다. 이 기능은 모든 데이터가 UART에 전송될 때까지 기다린다.
        • 기본형: static void uart_write_blocking (uart_inst_t *uart, const uint8_t *src, size_t len)
        • 매개 변수
          • uart: UART instance(uart0 or uart1)
          • src: 전송할 데이터(Bytes)
          • len: 전송할 데이터(Bytes) 수

  • Raspberry Pi Pico Default Serial 통신
    • C/C++ SDK에서는 Default 설정을 이용하여 Serial Input(stdin) 과 Output(stdout)를 용이하게 구현할 수 있는 환경을 제공한다.

      참고자료: "Raspberry Pi Pico C/C++ Getting started with Raspberry Pi Pico" Chapter 4. Saying "Hello World" in C

    • Default Serial 통신을 사용하기 위한 설정
      • Default Serial 통신에 사용하는 Port와 Pin
        • Default Serial 통신에 사용하는 Port와 Pin의 설정은 Raspberry Pi Pico Board 설정 파일(pico-sdk/src/boards/include/boards/pico.h)에서 설정한다.
        • Default Serial 통신에 사용하는 Port와 Pin의 설정 예:

        • C/C++ SDK를 처음 설치한 상태의 Default Serial 통신 Port와 Pin
          • C/C++ SDK를 처음 설치한 상태에서 USB CDC(USB serial)와 UART0를 Default Serial 통신에 사용할 수 있다.
          • Default UART0의 Pin 설정
            • UART0_TX: GP0(1번 Pin)
            • UART0_RX: GP1(2번 Pin)
            • GND: 3번 Pin
            • 주의: 컴퓨터(USB --> UART(RS232) 변환 모듈)의 전원 전압(Vdd)과 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 연결하지 않는다. USB --> UART와 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 다를 수 있다.

      • C stdout를 사용하기 위한 설정
        • CMakeLists.txt의 설정 예
        • 아래 예는 UART를 Default Serial 통신 Port로 사용하도록 설정한 예이다.

          USB CDC(USB serial)를 Default Serial 통신 Port로 사용하도록 하기 위하여는 pico_enable_stdio_usb(main 1) 와 같이 설정하여야 한다. main은 프로그램 이름으로 변경될 수 있다.

    • Default Serial 통신 프로그램 예
      • Default Serial 통신 Port를 stdout으로 사용하는 프로그램 예: default-serial-comm.c
        • "Hello World" 프로그램 예:
        • USB CDC(USB serial)를 Default Serial 통신 Port로 사용하기 위한 설정
        • 위 "CMakeLists.txt의 설정 예"를 참고하여 pico_enable_stdio_usb를 아래 예와 같이 Enable로 설정 한다. main은 프로그램 이름으로 변경될 수 있다.

          pico_enable_stdio_usb(main 1)

        • UART를 stdout를 Default Serial 통신 Port로 사용하기 위한 설정
        • 위 "CMakeLists.txt의 설정 예"를 참고하여 pico_enable_stdio_uart를 아래 예와 같이 Enable로 설정 한다. main은 프로그램 이름으로 변경될 수 있다.

          pico_enable_stdio_uart(main 1)

        주: Default Serial 통신 Port로 USB CDC(USB serial) 또는 UART를 설정하는 것은 프로그램 변경 없이 CMakeLists.txt에서 설정한다.

      • 실험을 위한 준비
        • USB CDC(USB serial)를 Default Serial 통신 Port로 사용하는 경우
          • Pi Pico Board의 Mini USB Port를 사용하기 때문에 별도의 회로 연결을 필요로 하지 않는다.

        • UART0를 Default Serial 통신 Port로 사용하는 경우
          • Pi Pico 개발보드와 PC의 UART 신호 연결
            • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Pi Pico 개발보드의 TXD0(GP0)를 연결한다.
            • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Pi Pico 개발보드의 RXD0(GP1)를 연결한다.
            • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Pi Pico 개발보드의 GND를 연결한다.
            • 주의: 컴퓨터(USB --> UART(RS232) 변환 모듈)의 전원 전압(Vdd)과 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 연결하지 않는다. USB --> UART와 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 다를 수 있다.

      • 실험 방법
        • "새 Project를 생성하고 Build 하기"를 참고하여 default-serial-comm Project를 생성한다.
        • 위 프로그램을 복사하여 Project 내의 "default-serial-comm.c"에 저장 한다.
        • 실험에 따라(USB serial or UART) default-serial-comm.c와 동일한 폴더에 있는 CMakeLists.txt에서 Default Serial 통신 Port를 설정한다.
        • "새 Project를 생성하고 Build 하기"를 참고하여 Project를 Build 한다.
        • 주: 처음 Project를 생성한 다음 nmake를 실행하면 AhnLab V3 바이러스 프로그램이 설치된 경우 malware/Win.Generic.C4992917 바이러스가 발견되었다는 메세지가 출력되고 Fatal error 가 발생하여 컴파일이 중단된다. 그러나 Error 메세지를 무시하고 한번더 nmake를 실행하면 컴파일이 잘 진행된다.

          주: AhnLab V3 바이러스 프로그램의 Home -> 보안 상태 설정에서 PC 실시간 검사를 Off 상태로 하면 이 문제가 발생하지 않음.

        • "Build 한 프로그램을 Pi Pico 보드에 Load(Flashing) 하고 실행하기"를 참고하여 default-serial-comm.uf2를 Pi Pico 보드에 Upload 하여 실행한다.
        • 주: PC에서 모니터 프로그램이 실행 중인 상태에서 Pi Pico 보드에 default-serial-comm.uf2를 Upload 하면, 오류가 발생할 수 있기 때문에 프로그램을 Pi Pico 보드에 Upload 한 다음 PC에서 모니터 프로그램을 실행하여야 한다.

        • USB CDC(USB serial)를 Default Serial 통신 Port로 사용하는 경우
          • Pi Pico Board의 Mini USB Port를 사용하기 때문에 별도의 회로 연결 없이 바로 프로그램이 실행되어 1초 간격으로 "Hello, world!" 메세지가 모니터에 출력된다.

        • UART0를 Default Serial 통신 Port로 사용하는 경우
          • PC에서 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
          • 모니터 프로그램에서 USB --> UART(RS232) 변환 모듈의 Serial Port를 확인하고 필요한 설정(Serial Port와 Baudrate(115200) 등을 설정)을 한다.
          • 1초 간격으로 "Hello, world!" 메세지가 모니터에 출력된다.


  • Raspberry Pi Pico UART 프로그램 예
    • 프로그램 예: UART basic
      • 이 예는 Pi Pico 개발보드의 UART1을 이용하여 PC와 Serial communication을 하는 예이다.

        UART1은 Default Serial 통신 Port가 아니기 때문에 C/C++의 stdio 함수(printf 등)을 사용할 수 없다. 실제 장치를 제어하는 경우 입출력 장치를 제어하는 별도의 프로그램을 사용하는 경우가 많기 때문에 stdio 함수(printf 등)을 사용하지 않는 경우가 많다. 만약 stdio 함수(printf 등)을 사용하여야 하는 경우에는 위 "Default Serial 통신"를 참고하여 UART1을 Default Serial 통신 Port로 설정하여 사용할 수 있다.

        Pi Pico Board 설정 파일(pico-sdk/src/boards/include/boards/pico.h)에서 UART1 (UART_TX: Pin4, UART_RX: Pin5)을 Default Serial 통신 Port로 설정하는 예:

        이 프로그램은 Keyboard로 부터 한 문자를 읽어 이 문자와 문자열 메세지를 출력한다.

        실험 회로 구성 예

      • UART 통신를 위한 설정과 문자 Input/Output 프로그램 예: uart-basi-pico.c
      • 실험을 위한 준비
        • Pi Pico 개발보드와 PC의 UART 신호 연결
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Pi Pico 개발보드의 TXD1(GP4)를 연결한다.
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Pi Pico 개발보드의 RXD1(GP5)를 연결한다.
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Pi Pico 개발보드의 GND를 연결한다.
          • 주의: 컴퓨터(USB --> UART(RS232) 변환 모듈)의 전원 전압(Vdd)과 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 연결하지 않는다. USB --> UART와 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 다를 수 있다.

      • 실험 방법
        • "새 Project를 생성하고 Build 하기"를 참고하여 uart-basi-pico Project를 생성한다.
        • 위 프로그램을 복사하여 Project 내의 "uart-basi-pico.c"에 저장 한다.
        • "새 Project를 생성하고 Build 하기"를 참고하여 Project를 Build 한다.
        • 주: 처음 Project를 생성한 다음 nmake를 실행하면 AhnLab V3 바이러스 프로그램이 설치된 경우 malware/Win.Generic.C4992917 바이러스가 발견되었다는 메세지가 출력되고 Fatal error 가 발생하여 컴파일이 중단된다. 그러나 Error 메세지를 무시하고 한번더 nmake를 실행하면 컴파일이 잘 진행된다.

          주: AhnLab V3 바이러스 프로그램의 Home -> 보안 상태 설정에서 PC 실시간 검사를 Off 상태로 하면 이 문제가 발생하지 않음.

        • "Build 한 프로그램을 Pi Pico 보드에 Load(Flashing) 하고 실행하기"를 참고하여 uart-basi-pico.uf2를 Pi Pico 보드에 Upload 하여 실행한다.
        • 주: PC에서 모니터 프로그램이 실행 중인 상태에서 Pi Pico 보드에 uart-basi-pico.uf2를 Upload 하면, 오류가 발생할 수 있기 때문에 프로그램을 Pi Pico 보드에 Upload 한 다음 PC에서 모니터 프로그램을 실행하여야 한다.

        • PC에서 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
        • 모니터 프로그램에서 USB --> UART(RS232) 변환 모듈의 Serial Port를 확인하고 필요한 설정(Serial Port와 Baudrate(115200) 등을 설정)을 한다.
        • 실험
          • PC의 Keyboard에서 문자를 입력하면 입력한 문자와 "UART input character" 메세지가 출력된다. 아래 예는 Keyboard에서 문자를 'a'를 입력한 경우 PC 모니터의 출력다.
          • a: UART input character


    • 프로그램 예: UART-LED control
      • 이 예는 Pi Pico 개발보드 UART 1을 이용하여 Pi Pico 개발보드의 LED를 제어(On, Off)하는 예이다.

        실험 회로 구성 예

      • UART 통신를 이용한 LED 제어 프로그램 예: uart-led-control.c
      • 실험을 위한 준비
        • Pi Pico 개발보드와 PC의 UART 신호 연결
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Pi Pico 개발보드의 TXD1(GP4)를 연결한다.
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Pi Pico 개발보드의 RXD1(GP5)를 연결한다.
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Pi Pico 개발보드의 GND를 연결한다.
          • 주의: 컴퓨터(USB --> UART(RS232) 변환 모듈)의 전원 전압(Vdd)과 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 연결하지 않는다. USB --> UART와 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 다를 수 있다.

          • LED는 Pi Pico 개발보드의 LED(GP25)를 사용한다.
      • 실험 방법
        • "새 Project를 생성하고 Build 하기"를 참고하여 uart-led-control Project를 생성한다.
        • 위 프로그램을 복사하여 Project 내의 "uart-led-control.c"에 저장 한다.
        • "새 Project를 생성하고 Build 하기"를 참고하여 Project를 Build 한다.
        • "Build 한 프로그램을 Pi Pico 보드에 Load(Flashing) 하고 실행하기"를 참고하여 uart-led-control.uf2를 Pi Pico 보드에 Upload 하여 실행한다.
        • 주: PC에서 모니터 프로그램이 실행 중인 상태에서 Pi Pico 보드에 uart-basi-pico.uf2를 Upload 하면, 오류가 발생할 수 있기 때문에 프로그램을 Pi Pico 보드에 Upload 한 다음 PC에서 모니터 프로그램을 실행하여야 한다.

        • PC에서 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
        • 모니터 프로그램에서 USB --> UART(RS232) 변환 모듈의 Serial Port를 확인하고 필요한 설정(Serial Port와 Baudrate(115200) 등을 설정)을 한다.
        • 실험
          • PC의 Keyboard에서 제어 문자를 입력하면 입력한 문자와 ": LED control character" 메세지가 출력된다. 아래 예는 Keyboard에서 문자를 'y'를 입력한 경우 PC 모니터의 출력다.
          • y: LED control character

          • y 제어 문자를 입력하면 LED 가 Turn on 되고, n 제어 문자를 입력하면 LED 가 Turn off 된다.
    • 프로그램 예: UART Interrupt를 이용한 UART-LED control
      • 이 예는 Pi Pico 개발보드 UART Interrupt을 이용하여 Pi Pico 개발보드의 LED를 제어(On, Off)하는 예이다.

        실험 회로 구성은 위 UART-LED control을 참고바람.

      • UART 통신를 이용한 LED 제어 프로그램 예: uart-led-interrupt.c
      • 실험을 위한 준비
        • Pi Pico 개발보드와 PC의 UART 신호 연결
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Pi Pico 개발보드의 TXD1(GP4)를 연결한다.
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Pi Pico 개발보드의 RXD1(GP5)를 연결한다.
          • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Pi Pico 개발보드의 GND를 연결한다.
          • 주의: 컴퓨터(USB --> UART(RS232) 변환 모듈)의 전원 전압(Vdd)과 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 연결하지 않는다. USB --> UART와 Pi Pico 개발보드의 전원 전압(Vdd)은 서로 다를 수 있다.

          • LED는 Pi Pico 개발보드의 LED(GP25)를 사용한다.
      • 실험 방법
        • "새 Project를 생성하고 Build 하기"를 참고하여 UART Interrupt Project를 생성한다.
        • 위 프로그램을 복사하여 Project 내의 "UART Interrupt.c"에 저장 한다.
        • "새 Project를 생성하고 Build 하기"를 참고하여 Project를 Build 한다.
        • "Build 한 프로그램을 Pi Pico 보드에 Load(Flashing) 하고 실행하기"를 참고하여 UART Interrupt.uf2를 Pi Pico 보드에 Upload 하여 실행한다.
        • 주: PC에서 모니터 프로그램이 실행 중인 상태에서 Pi Pico 보드에 uart-basi-pico.uf2를 Upload 하면, 오류가 발생할 수 있기 때문에 프로그램을 Pi Pico 보드에 Upload 한 다음 PC에서 모니터 프로그램을 실행하여야 한다.

        • PC에서 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
        • 모니터 프로그램에서 USB --> UART(RS232) 변환 모듈의 Serial Port를 확인하고 필요한 설정(Serial Port와 Baudrate(115200) 등을 설정)을 한다.
        • 실험
          • PC의 Keyboard에서 제어 문자를 입력하면 입력한 문자와 ": LED control character" 메세지가 출력된다. 아래 예는 Keyboard에서 문자를 'y'를 입력한 경우 PC 모니터의 출력다.
          • y: LED control character

          • y 제어 문자를 입력하면 LED 가 Turn on 되고, n 제어 문자를 입력하면 LED 가 Turn off 된다.

  • Raspberry Pi Pico UART - C 관련 페이지 보기