[펌웨어] 보드 및 CubeIDE

정재훈·2022년 4월 28일
0

FirmWare

목록 보기
1/7

MCU 소개

OSHW : Open Source HW로 배우기가 쉽고 빠르며, HW 및 SW 지식이 부족해도 작동 가능하다. 대표적인 예로는 라즈베리파이, 아두이노, 이글 등이 있다. 교육용 보드 이미지가 있다.

OSHW x : 반도체회사들이 만드는 반도체로 개발용 보드 이미지가 있다.
OSHW를 사용하지 않은 회사가 더많다.

MCU : Microcontroller Unit
MCU 업계
1. STMicroelectronics : 개발 보드 저렴, 무료 개발 환경, 다양한 오픈 소스코드
2. Microchip
3. NXP
4. Texas Instruments
5. Renesas

보통 회로설계와 칩셋 제조사가 분리되어 있다.

사용할 MCU 정보

  1. 보드 이름 : Nucleo
  2. 보드 모델명 : Nucleo F103RB
  3. ST 사의 CPU 칩셋 이름 : STM32F103RB
  4. CPU 설계 : ARM Cortex-M3

사용할 개발도구

STM32CubeIDE 설치에서 회원가입 후 윈도우용으로 설치해준다.

Trace 제한

임베디드에서는 보통 Trace가 안된다.
Trace : CPU동작을 멈추면서, 한 단계씩 진행하는 디버깅 방식인데 임베디드 환경에서 CPU를 일시 중지시키는 일은 어려운 일이다.
해결책
디버깅 장비
1. ST Link/V2 : 2만원 가량, ST사에서 제작
2. Trace32 : 1000만원 가량, 디버거 성능이 좋다.

제가 사용할 Nucleo 보드에는 ST Link/v2가 포함되어 있다.

CubeIDE

주석은 삭제 말고 명심히 살펴봐야한다. CODE Begin 과 CODE END 사이에 작성해줘야, generate 할 시 삭제되지 않는다.

초기셋팅

Peripherals(주변기기)

Peripherals : MCU 에서, CPU / 메모리를 제외한 나머지 장치들을 뜻합니다.
종류
1. Input Device : Switch(Button) / Sensor
2. Output Device : LED / Motor
3. 통신 Device : I2C / SPI 등

Pinout

어떤 PIN 을 사용할지 결정
1. 옅은 노란색 : 전원 관련
2. 카키색 : 변경 불가 PIN
3. 초록색 : 선택완료 PIN
4. 회색 : 변경 가능 PIN

MCU Selector을 통해 F103RBT6를 선택했다면 SYS에서 Serial Wire통신으로 설정해줘야 한다.

GPIO핀 확인

GPIO 핀을 확인하기 위해서는 내부 회로도를 살펴보면 확인할 수 있다.
회로도 - Schematic에서 회로도를 다운받아 확인할 수 있다.

LED 켜기

Drivers > STM ~ > Src > ~gpio.c 에서 사용가능 함수를 사용할 수 있습니다.
main.c에서 MX_GPIO_Init()를 Crtl + 클릭해보면 내가 설정한 핀을 확인할 수 있다.
회로도를 확인하여 핀을 살펴봐야한다.

LED 2개 번갈아 가며 키기

초기셋팅
PA5 핀의 라벨 : LD2
PA6 핀의 라벨 : LD3

함수설명
HAL_GPIO_WritePin([핀타입], [핀번호], [핀상태])
1. HAL : Hardware Abstraction Layer로 펌웨어에서 하드웨어로 접근하기 위해서는 레지스터를 설정하여야 하는데 조금 어렵다. 따라서, 펌웨어와 하드웨어 중간에 HAL을 위치시켜 내부의 레지스터 설정을 감추고 다양한 API를 제공해주어 HAL에 접근하면 된다.
2. 핀타입 : PA핀은 GPIOA로, PB핀은 GPIOB로 PAC핀은 GPIOC로 설정해준다.
3. 핀번호 : PA5핀은 GPIO_PIN_5 혹은 [라벨]_Pin으로 설정해준다.
4. 핀상태 : SET(1) 켜기 or RESET(0) 끄기로 설정해준다. set / reset 소문자로도 가능

HAL_GPIO_WritePin(GPIOA,LD2_Pin, 1);
	  HAL_Delay(1000);
	  HAL_GPIO_WritePin(GPIOA,LD2_Pin, 0);
	  HAL_Delay(500);

	  HAL_GPIO_WritePin(GPIOA,LD3_Pin, 1);
	  HAL_Delay(1000);
	  HAL_GPIO_WritePin(GPIOA,LD3_Pin, 0);
	  HAL_Delay(500);

LED 밝기 낮음 -> 높음

while (1)
  {
	  for(int j=1; j<10; j++)
	  {
		  for(int i=0; i<20; i++)
		  {
			  HAL_GPIO_WritePin(GPIOA,LD2_Pin, 1);
			  HAL_Delay(j);
			  HAL_GPIO_WritePin(GPIOA,LD2_Pin, 0);
			  HAL_Delay(10-j);
		  }
	  }
profile
여러 방향으로 접근하는 개발자

0개의 댓글