AVR의 경우 클럭 설정은 fuse bit의 값을 조정함으로써 이루어졌다면, STM32F103은 프로그램으로 설정해 주어야된다는 차이점이 있다.AVR이 H/W 적인 설정에 가깝다면, STM은 S/W 설정이라고 보면 될 것이다.이번 글에서는 STM32F103에서의 클럭 설정 방법에 대해서 설명하도록 하겠다.먼저, clock 체계가 어떻게 되어 있는지 한눈에 알 수 있는 그림을 찾아보도록 한다.위의 그림이 STM32F103의 clock 체계를 일목요연하게 보여주고 있다.처음 보면 다소 복잡해 보일수도 있겠지만, datasheet를 분석해 보면 생각보다 복잡하지 않다는것을 알게 된다.그림의 빨간 박스로 표시된 HSI와 HSE가 클럭 소스이다. 이 두개 중에 하나를 클럭 소스로 선택하여야 한다. 그림에도 표시되..
AVR 입문 과정에서 했던것처럼 이번 글에서도 GPIO를 제어하여 LED를 깜빡이게 하는 방법에 대해서 설명하도록 하겠다.가지고 있는 보드에 LED하나가 PC13핀에 연결되어 있다.회로도에는 다음과 같이 연결되어 있다고 보여준다. LED의 anode핀은 Vcc에 연결되어 있고, cathod 핀은 저항을 통해 칩의 PC13핀에 연결된다. 그렇다는 얘기는 PC13핀의 전압이 0일때 LED에 불이 들어온다는 뜻이다. 코드를 작성하기 전에 STM32F103 칩이 어떻게 생겼는지 전체 블럭도를 한번 훓어보기로 하자.빨간색 박스로 표시되어 있는 부분이 가장 중요한 ARM core 블럭이다. 그림에서처럼 Bus Matrix를 통해서 Flash memory, SRAM, peripheral 블럭들과 연결되는 것을 볼 수..
심화 과정 중 crt0에서 설명하였듯이 Reset 상태에서 main() 함수까지 진입하기 전에 처리해 주어야 하는 과정이 필요하다. 이번 글에서는 어셈블 코드로 작성했던 AVR과는 달리 C코드로 crt0 코드를 작성해 보도록 하겠다.vector.c 파일안에 있는 Reset_handler() 함수를 다음과 같이 수정한다. void Reset_handler(void) { extern int main(int, char **); extern unsigned int _etext, _sdata, _edata, _sbss, _ebss; volatile unsigned int *src, *dst; /* Relocate Data section */ for ( src = &_etext, dst = &_sdata; dst ..