티스토리 뷰

Embedded OOP

UART

Just4Fun 2020. 4. 18. 15:27

임베디드 시스템 개발에서 가급적 가장 먼저 해야 할 일은 디버깅을 위한 UART 설정일 것이다.

따라서 이번에는 두 개의 UART 를 설정하여 제대로 동작되는지 알아 볼 것이다.

UART1은 디버깅을 위하여 115200 bps 로 설정하여 PC와 연결하고 UART5은 GPS 모듈과 9600bps로 연결한다.

GPS 모듈에서 보내주는 데이터를 곧바로 디버거 UART로 보내어 PC에서 확인하는 방법을 통하여 두개의 UART 모듈이 각각 독립적으로 잘 동작되는지 확인해 보는 것이다.

이번 프로젝트에서 사용하는 GPS 모듈은 아래 그림에서 보여지는 것을 이용하였다.

두 UART를 설정하는 코드는 다음과 같이 만든다.

Uart       cons{Uart::UART1};
Uart       gps{Uart::UART5};

static void setup()
{
    cons.baud(115200);
    cons.console();

    gps.baud(9600);

    printf("\x1B[2J\x1B[1;1H");
    printf("Embedded Program with C++. %s %s\n", __DATE__, __TIME__);
    printf("Ref Clock : %lu\n", Rcc::ref_clock());
    printf("Sys Clock : %lu\n", Rcc::sys_clock());
    printf("Ahb Clock : %lu\n", Rcc::ahb_clock());
    printf("APb2 Clock: %lu\n", Rcc::apb2_clock());
    printf("APb1 Clock: %lu\n\n", Rcc::apb1_clock());
}

디버깅을 위하여 PC와 연결되는 UART1의 이름을 cons라고 정하였고 console()을 이용하여 stdin/stdout 으로 사용되도록 하였다.  원래 C++에서 stdout으로 출력하는데 사용하는 함수는 std::cout 이지만 임베디드 시스템에서는 C에서 사용하는 printf가 더 적절한것 같아서 printf를 이용하여 디버깅 메시지를 출력하도록 하였다.   위의 코드가 실행되면 RCC에서 설정한 각각의 clock 주파수가 출력된다.  RCC 설정에서 설정한 값들이 제대로 적용되었는지 확인할 수 있다.

static void loop()
{
    cons.putc(gps.getc());
}

위의 코드를 적용하면 GPS에서 출력되는 글자들이 곧바로 PC로 전달된다.

위의 결과를 통하여 RCC 클럭 설정값과 함께 GPS에서 보내주는 데이터가 PC로 제대로 전달되는지 확인 할 수 있다.

cons.putc(gps.getc()); 를 C++에서 제공하는 operator overloading 기능을 이용하여 다르게 표현해 보았다.

void Uart::operator << (Uart& rhs)
{
    this->putc(rhs.getc());
}

static void loop()
{
    cons << gps;
}

uart.cpp에 "<<" operator를 위와 같이 만든다음 loop() 함수에서 cons << gps; 를 적용하면 동일한 결과를 볼 수 있다.

굳이 이렇게까지 할 필요성이 있을지 모르겠지만 C에서는 할 수 없는 프로그램을 C++로 가능한 지 확인해 보는 차원에서 만들어 보았다.

 

embed-oop.zip
0.03MB

'Embedded OOP' 카테고리의 다른 글

SPI  (0) 2020.05.03
I2C  (0) 2020.05.01
System Clock 설정  (0) 2020.04.15
GPIO In  (0) 2020.04.15
GPIO Out  (0) 2020.04.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함