이번에는 I2C에 연결된 디바이스와의 통신을 위한 코드를 만들어 보기로 했다. 프로젝트는 I2C1에 OLED 디스플레이 모듈을 연결하고, I2C3에는 AK8975, BMA150, ITG3200을 연결하여 I2C3에서 읽은 X, Y, Z 축 데이터를 OLED에 출력해 보는 것이다. 이번 프로젝트에서는 단순히 I2C 연결을 확인하는 차원에서 각종 센서 모듈에서 raw data를 출력하는 기능만 수행하도록 하였다. 시간이 되면 세가지 센서를 연동하여 나침반과 자세를 표시해보는 기능을 구현해 볼 예정이다.
임베디드 시스템 개발에서 가급적 가장 먼저 해야 할 일은 디버깅을 위한 UART 설정일 것이다. 따라서 이번에는 두 개의 UART 를 설정하여 제대로 동작되는지 알아 볼 것이다. UART1은 디버깅을 위하여 115200 bps 로 설정하여 PC와 연결하고 UART5은 GPS 모듈과 9600bps로 연결한다. GPS 모듈에서 보내주는 데이터를 곧바로 디버거 UART로 보내어 PC에서 확인하는 방법을 통하여 두개의 UART 모듈이 각각 독립적으로 잘 동작되는지 확인해 보는 것이다. 이번 프로젝트에서 사용하는 GPS 모듈은 아래 그림에서 보여지는 것을 이용하였다. 두 UART를 설정하는 코드는 다음과 같이 만든다. Uart cons{Uart::UART1}; Uart gps{Uart::UART5}; static..
본격적인 프로젝트를 시작하려면 시스템 클럭을 설정해 주어야 한다. 시스템 클럭 설정을 위해서 별도의 객체는 생성하지 않고 static 함수를 제공하는 방법을 선택하였다. #define REF_CLK 8000000 static void setup() { Flash::Flash_init(5); Rcc::Rcc_init(REF_CLK, 4, 180, Rcc::PLLP_2); Rcc::Set_bus_clock(Rcc::HPRE_1, Rcc::PPRE_4, Rcc::PPRE_2); led = new Gpio_out{Gpio::PORTG, LED_GRN|LED_RED}; led->Set_pin(LED_GRN); } 위의 설정대로 하면 180MHz로 동작하게 된다. 이렇게 빠른 속도로 동작시키기 위해서는 Flash ..