이번에는 타이머 기능중 많이 사용하는 PWM 기능을 구현해 보기로 하겠다.STM32F103에 들어 있는 타이머는 AVR에 비해서 다소 복잡한 면이 있다. 일일이 그 차이점과 특징에 대해서 분석을 완료하지 못한 상태라 현재로서는 설명할 능력이 안된다.다만, 최소한의 코드를 작성하여 PWM이 동작되는지만 확인해 보는것으로 진행하도록 하겠다.시험을 위하여 PA0 핀으로 PWM 신호를 내 보내도록 하겠다. PA0 핀은 TIM2의 CH1을 설정하여 PWM으로 사용하도록 되어 있다. 동작 확인을 위하여 PA0핀에 또다른 LED 하나를 연결시키도록 한다. int main(int argc, char *argv[]) { uint32_t tim1clk, timxclk; uint32_t count = 0; sysclock_..
GPIO를 통한 LED 제어 글에서 LED가 일정 시간동안 켜져 있다가 다시 일정 시간이 지난 후 꺼지게 하기 위해서 for loop에 의한 시간 지연 함수를 사용했었다.그러나 그 때에는 어느정도의 시간이 지연되었는지 정확히 알 수 없었고 따라서 정확한 시간을 제어할 수가 없었다.이번 글에서는 타이머 기능을 이용하여 정확한 시간동안 delay를 주는 방법에 대해서 설명하도록 하겠다.AVR 입문 과정에서 이미 설명하였듯이 타이머 기능은 본질적으로 카운터를 이용하는 것이다. 카운터로 들어오는 입력 신호가 아주 정확한 주기로 들어온다면 타이머로도 사용할 수 있다는 설명이었다.System Timer에서 이미 Cortex-M에서 사용할 수 있는 시스템 타이머에 대해서 설명하였지만 이번에는 좀더 많은 기능을 수행할..
ARM Cortex-M 카테고리에서 설명하였던 앞의 글들은 결국은 RTOS를 만들어 가는 각 단계별 과정이라고 볼 수 있다.AVR 심화 과정중 뒷부분에 설명한 RTOS는 8비트 AVR에 맞도록 구현하였다면, 이번에는 32비트 ARM Cortex-M3에 맞도록 만들어 보았다.코드를 보면 알겠지만 Cortex-M은 AVR에 비해서 interrupt(exception) 처리과정이 많이 복잡한 구조를 가지고 있다. 이 부분을 블로그에서 설명하기에는 능력이 모자라므로, ARM Cortex-M architecture 문서와 시중에 나와 있는 책들을 참고하여 그 원리를 공부하기 바란다.이 글은 CPU 동작 원리와 RTOS를 공부하고자 하는 이들에게 참고가 될 수 있도록 하는 의미에서 작성되었으므로 굳이 RTOS에 관..