STM32 - INTRO(2)

EEC·2025년 2월 21일

STM32

목록 보기
2/9

rev. 2502211105 : 첫 작성.


사실 INTRO를 지난 포스팅에서 끝내려고 했다.

내 학습 방법과 순서에 대해서 정리하고 기록하려고는 용도로만 작성하려고 했기 때문이다.

그럼에도 두번째 인트로를 작성하는 이유는 본격적인 Peripherals를 다루기 앞서, MCU 사용에 기본적으로 세팅해야 되는 요소들이 있기 때문이다.

이 포스팅에선 그 요소들에 대해 다뤄볼 것이다.

Clock

CPU에서 Clock은 프로세서가 명령어를 실행하는 속도의 기준이다.
즉, 공급되는 Clock의 속도에 맞춰 명령어를 처리한다는 얘기다.
그렇기 때문에, Clock이 빠를수록 당연히 그 CPU의 처리속도도 빠르다.

바꿔 말하면, CPU에는 Clock이 공급되어야 명령어를 처리할 수 있다는 말이다.

ST의 MCU에도 당연히 Clock이 공급되어야 한다.

ST에서는 MCU에 총 4개의 Clock Source를 제공할 수 있게 설계해놓았다.

LSI : Low Speed Internal
HSI : High Speed Internal
LSE : Low Speed External
HSE : High Speed External

Low Speed는 kHz 단위의 클럭, High Speed는 MHz 단위의 클럭을 의미하는 듯 하다.
또, Internal/External로 나뉘는데 Internal은 MCU 자체에 클럭이 내장되어 있다는 얘기이고, External은 MCU외부 즉, Board에 실장해서 제공되어야 한다는 얘기다.

일반적으로 Crystal이라는 소자를 사용해 클럭을 제공해준다.

설계에 대한 매뉴얼은 MCU의 Application Note - Getting started with ~ hardware development에 나와 있으니 하드웨어 엔지니어는 이를 Board 설계에 참고하면 된다.

Clock 설정

ST사에서는 MCU 사용을 위해 STM32CubeMX라는 소프트웨어로 간편하게 Clock을 설정할 수 있도록 제공해준다. (GUI 방식)

그럼 Clock을 설정해보자.

우선 내가 사용하는 칩에 대한 선택이 선행되어야 한다.

그 후 System Core > RCC에 접근한다.
그러면 외부 클럭에 대한 설정을 제공할 것이다.

내가 사용하는 Board의 Schematic을 보면,
HSE는 N/A 처리가 되어있고, (Not Assembled)
LSE는 32.768kHZ의 Crystal이 실장되어 있다.

따라서, 해당 Clock을 사용할 것이라면 해당 소스를 활성화해주면 된다.

그 다음 Clock Configuration으로 넘어간다.
그러면 복잡한 Block Diagram이 나오는데 하나씩 살펴보자.

여기서 내가 주목해서 봐야할 것은 Mux라는 사다리꼴 모형의 기호와 우측에 있는 최종적으로 설정되는 값들이다.
결국, 우측에 있는 클럭의 속도로 각 장치가 명령어를 처리한다는 얘기이다.

우선 Mux는 내가 어떤 Clock소스를 사용할 것인지를 결정하는 장치라고 생각하면 된다.
내 Board에는 HSE가 없기 때문에 HSI, PLLCLK만 사용이 가능하다.

PLL은 주파수를 제어해주는 시스템 장치라는 정도만 당장 알고 있으면 된다.
PLL Source Mux에 입력되는 Clock의 속도를 조정하여 출력으로 내보내주는 것이다.

그러면 MCU 유저들은 궁금증이 들 수 있다.
빠르면 명령어 처리 속도가 빨라지니까 PLL로 무조건 Clock을 높이는게 좋은거 아닌가?

Clock속도가 빨라지면 성능은 당연히 좋아진다. 그러나 전력소모 또한 커진다.
따라서, 내가 구현하고자 하는 어플리케이션에 따라 필요 이상의 Clock을 사용할 필요가 없다는 얘기이다.

자 그러면, System Clock Mux까지 선택하는데에는 문제 없을 것이다.
그 뒤 라인을 보면 AHB, APB라는 용어가 나온다.

AHB : Advanced High-performance Bus
APB : Advanced Peripheral Bus

해당 용어는 ARM사에서 지정한 Bus의 명칭이다.(Bus는 Clock을 포함한 데이터의 이동 경로를 말한다.)
이 BUS들을 통해 내가 사용할 Peripherals의 Clock 속도가 결정되는 것이다.

내가 사용할 Peripherals가 어떤 BUS에 연결되어 있는지 확인하려면, 해당 MCU의 System Architecture를 봐야한다.
ST에서는 Reference Manual이라는 Document에서 해당 아키텍쳐를 제공한다.

하이라이트 친 부분을 살펴보면,
각 Peripherals가 어떤 APB 버스에 연결되어 있는지 나와있다.
해당 부분을 보고 내가 사용하고자 하는 장치에 내가 원하는 Clock을 제공해주면 되는 것이다.

Debug

Debug는 내가 설계한 소스 프로그램의 버그를 잡아주는 장치이다.
ST사의 MCU는 해당 Debug를 사용하기 위해서 SWO, JTAG 두 가지의 Interface를 사용할 수 있도록 지원한다.

SWO : Serial Wire Output
JTAG : Joint Test Action Group

SWO는 단일 통신 라인을 사용해서 회로 구성이 비교적 간단하고,(ARM코어 에서 사용)
JTAG은 멀티 통신 라인을 사용해서 회로 구성이 비교적 복잡하다.(전반적인 임베디드 시스템에서 사용)

결국, 유저가 선택해서 사용하면 되는데 JTAG이 회로 구성이 복잡한 만큼 디버깅 속도가 더 빠르다고 한다.

이 Interface들을 사용하기 위해선 MCU 외부에 별도 포트를 두어 보드에서 지원해야 사용할 수 있다.
그 설계를 위한 내용도 Application Note - Getting started with ~ hardware development에 나와 있으니, 하드웨어 엔지니어는 해당 문서를 참고하면 된다.

내 보드는 SWO 포트를 지원한다.

추가적으로, Timebase Source에 대해서 나와있는데,
AI 형님에게 물어보니 이렇게 친절하게 대답해준다.

Debug Timebase Source는 디버깅 시스템에서 시간 기준을 설정하는 데 사용되는 소스입니다. 
이는 디버거가 시스템의 동작을 분석하고, 디바운스 디버깅을 수행할 때 중요한 역할을 합니다. 
Timebase Source는 디버거가 시스템의 클럭 신호를 기반으로 디버깅 데이터를 시간 순서대로 정렬하고 분석할 수 있게 합니다.

주로 사용되는 Timebase Source는 다음과 같습니다:

ⓐ CPU 클럭: 시스템의 CPU 클럭 신호를 사용하여 디버거가 시스템의 동작을 시간 기준으로 분석합니다.

ⓑ 외부 클럭: 시스템 외부에서 제공되는 클럭 신호를 사용하는 경우도 있습니다.

ⓒ SWO 클럭: Serial Wire Output(SWO) 클럭 신호를 사용하여 디버거가 높은 데이터 전속률로 디버깅 데이터를 수집할 수 있습니다.

Systick은 ARM Cortex-M 시리즈에서 제공되는 MCU에 내장된 시스템 타이머다.
MCU가 부팅이 완료되면 계속 동작하는 타이머다.

profile
느리지만 확실하게

0개의 댓글