Category (Click)
개발보드 덕질하기

[STM32C0] STM32C0316-DK 개발보드 핸즈온

 차완기 - @5/21/2023, 12:27:00 AM
지난 2월 STMicroelectronics에서 개발보드를 직구하였습니다. 구매한 뒤 대부분 내버려두고 있다가 이제서야 포스팅을 올리게 되었습니다.

Discovery Kits

ST에서 STM32 MCU를 부착해 공식적으로 출시하는 개발보드는 부가 기능에 따라 크게 3가지로 나뉘며, 이번에 소개할 개발보드는 MCU와 MCU를 테스트할 수 있는 몇몇 모듈을 부착한 형태의 Discovery Kit에 해당합니다.
STM32C0 시리즈의 디스커버리 키트를 검색하면 STM32C011F6가 사용된 버전, STM32C031C6가 사용된 버전 2가지로 나뉩니다.
STM32C0 소개 페이지를 확인하면 STM32C031C6 MCU가 가장 고사양인 것을 알 수 있고 기왕이면 가장 성능 좋은 제품을 구매하고자 이 칩이 사용된 STM32C0316 보드를 구매하였던 것입니다.

STM32C031C6 MCU 살펴보기

STM32C0 시리즈

한 줄로 정리하자면 STM32C0 시리즈는 8bit와 32bit의 고성능 MCU 사이를 채워주는 가성비 라인업이라는 것 같습니다.

STM32C031C6 주요 사양

이번에 구매한 개발보드에 사용된 STM32C031C6 MCU의 주요 사양은 아래와 같습니다.
작동전압: 2.0~3.6 V
코어: Arm 32-bit Cortex-M0+, 48 MHz
라즈베리파이 피코와 동일한 Arm의 Cortex-M0+ 프로세서가 사용되었으며, 최대 48 MHz의 클럭을 가집니다.
Flash: 32 KB
RAM: 12 KB
아두이노 우노의 ATmega328과 같은 크기의 flash를 가지지만, CPU의 성능이 높아서 그런지 SRAM의 경우 12 KB로 더 높습니다.
클럭 소스: 4~48 MHz 지원, 48 Mhz HSI, 32 kHz LHI RC 오실레이터 내장
오실레이터가 내장되어있어 회로 설계가 행복할 것 같습니다.
GPIO: 45개, 5V 입력 허용
3.3V IO를 사용하지만 5V 입력을 받을 수 있어 별도의 레벨 시프터가 필요하지 않습니다.
ADC: 19+2
MCU 자체에는 21개의 ADC 채널이 있지만, 이 중 2개의 채널은 칩에 내장된 온도센서, 레퍼런스 전압 측정에 사용되어 19개의 ADC 채널이 외부로 뽑혀있습니다.
타이머 8개, I2C 1개, USART 2개, SPI, I2S 1개

STM32C0316-DK 살펴보기

개발보드를 살펴보자면 누클레오보드와 다르게 핀이 많고 데모를 위한 부품도 달려있습니다. 디스커버리 키트의 기능은 다음과 같습니다.

전원 공급

디버거인 STLINK-V3MINIE는 전원을 공급하지 않기 때문에 BTB 커넥터 또는 STDC14 커넥터로 디버거와 연결하더라도 MCU에 전원이 공급되지 않습니다. 따라서 후술할 USB Micro-B, STMod+, DIP28 커넥터로 전원을 공급하여야 합니다.
입력된 전압을 MCU를 위한 3.3V로 변환하는 LD56100DPU33R 레귤레이터가 내장되어 5V 라인의 전압을 변환해 3.3V 라인으로 공급하며, 만약 3.3V보다 낮은 전압이 5V 라인에 공급된다면 바이페스 모드로 전환됩니다. (MCU의 최저 입력전압인 2V를 테스트하기 위해)

온보드 LED

총 3개의 온보드 LED가 존재하며, 그 중 2개는 3.3V(LD3, 청색)와 5V(LD2, 적색) 전원 확인용이고 나머지 하나(LD1, 황색)는 MCU의 GPIO중 PA5에 부논리로 연결되어 있습니다. 이외에도 PA5는 Timer 1의 CH1로 사용할 수 있어 PWM을 이용한 밝기 제어 역시 가능합니다.

32.768 kHz LSE

MCU 하단에는 RTC를 위한 32.768 kHz LSE가 부착되어 있습니다. 만약 RTC를 테스트해야 한다면 이를 활용할 수 있습니다.

리셋 버튼

MCU 옆의 택트 스위치는 리셋 용도입니다.

5방향 조이스틱

STDC14 단자 바로 위에 위치한 조이스틱은 PA4의 ADC1 IN4와 연결된 디지털 스위치입니다.
처음 구매할 당시 데이터시트를 자세하게 읽어보지 않아 각 위치별로 아날로그 강도를 출력하는 스위치인 것으로 낚여버렸는데요, 사실 스위치 자체는 디지털이지만 각 위치별로 서로 다른 분배저항이 연결되어 있던 것이었습니다.

USB Micro-B

BTB 커넥터의 반대편에는 Micro-B 타입의 USB 커넥터가 부착되어 있습니다. 데이터 시트 상에는 전원 공급용이라고 합니다.
그런데 한 가지 이상한 것이 MCU에서 USB를 지원하지 않는데, USB 데이터 디퍼런셜이 PA11과 PA12에 연결되어 있었습니다. 아무래도 추후 회로를 다른 MCU에 재사용하기 위해 이렇게 설계해둔게 아닌가 싶습니다.
추가로 C타입이 아닌 것이 조금 아쉽습니다 ㅋㅋ..
@5/21/2023 추가
네이버 전자공작 카페에 동일한 내용을 질문하였는데, 짐작한 내용과 같이 회로가 다른 MCU에도 사용할 수 있도록 만들어졌기 때문이라고 합니다.

기능 선택 스위치

리셋버튼 아래에 위치한 슬라이드 스위치는 Discovery Kit의 기능을 설정하기 위한 스위치입니다.
IDD: 전류 측정을 위한 스위치로, ON 상태에서는 MCU에 3.3V 라인 전원을 그대로 공급하지만 OFF 상태에서는 SB1를 통해서 전원이 공급되도록 합니다. 만약 전류를 측정한다면 OFF한 후 SB1에 전류계를 설치하면 되겠죠.
Demo: 데모용 LED와 조이스틱에 공급되는 3.3V 전원을 설정합니다.
RXSL: MCU의 Rx(PB7)을 ST-Link의 VCP와 연결할지 여부를 설정합니다. 블루투스 연결용 단자와 같은 UART1을 공유하기 때문에 만약 블루투스 모듈을 연결한다면 OFF로 설정해야 합니다.
32K: 32.768 kHz LSE를 켜거나 끕니다.

기타 단자

HC-05 연결용 커넥터
STMod+ 커넥터
DIP28 호환 커넥터

테스트

ST-Link를 연결하더라도 전원 공급이 되지 않기 때문에 전원 단자를 추가로 연결해주어야 합니다. 앞뒤로 케이블이 연결되니 조금 괴상하네요..
전원을 공급하면 영상과 같이 유저 LED가 빠르게 깜박입니다.

CubeIDE 프로젝트 생성

잘 작동하는것은 확인했으니 펌웨어도 업로드해봐야겠죠. LED를 느리게 깜박이도록 해보려 합니다.
STM의 개발보드를 사용하면 Board Selector 탭에서 보드를 선택해 프리셋이 적용된 프로젝트를 시작할 수 있습니다. 개발보드 이름인 STM32C0316-DK를 검색한 후 프로젝트를 생성하였습니다.
위 사진과 같이 프리셋이 적용되어있는것을 확인할 수 있습니다.

테스트 코드 작성 및 테스트

/* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_WritePin(Led_GPIO_Port, Led_Pin, GPIO_PIN_SET); HAL_Delay(1000); HAL_GPIO_WritePin(Led_GPIO_Port, Led_Pin, GPIO_PIN_RESET); HAL_Delay(1000); /* USER CODE END WHILE */
C
복사
main함수의 while문에 1초 간격으로 LED를 끄고 켜도록 코드를 작성했습니다.
빌드 후 업로드하였더니 잘 작동하네요.

마무리

여기까지 STM32C0316-DK 개발보드를 살펴보았습니다. STM32C0 시리즈는 앞으로도 자주 사용하게 될 것 같아 이번에 구매한 키트를 통해 ADC, Timer 등을 테스트해보고 아직 포스팅하지 않은 누클레오보드를 통해 토이 프로젝트를 진행해볼 예정입니다.