Kraklog

[STM32] LED_Blink 본문

[Harman] 하만 반도체 설계/STM32

[STM32] LED_Blink

Krakens 2024. 1. 8. 16:04
728x90

프로그램 : Cube IDE (링크)

사용보드 : STM32 F411 Nucleo 64

 

STM32_RM0383_reference menual.pdf
8.42MB
STM32_Schematic.pdf
1.51MB
STM32-F411x datasheet.pdf
2.13MB
STM32-Nucleo64.pdf
3.45MB

 

 

보드 겉면도 : 

윗쪽부분이 통신을 담당하는 ST-link 기판, 아래쪽이 개발보드

 

 

목표 : HAL 드라이버를 쓰기전, 레지스터를 활용한 동작 구현 (low level 개발)

 

설치 과정 및 설정 : 

더보기

링크에 접속 후, 각 os 버전에 맞춰서 프로그램을 다운로드 한다.
개발 프로그램을 사용하기위해서도 로그인이 필요하니 회원가입을 해야한다.

 

설치를 완료하고, Cube IDE를 실행시킨다.

 

Nucleo 64 , F411보드

개발 보드가 있다면 보드를, 칩셋만 갖고 있다면 (Black pill이라던가, blue pill 등) MCU/MPU 셀렉터를 이용해서 자신의 칩셋에 맞는 보드를 눌러서 설정을 해주도록 한다.

 

 

work space와 프로젝트 이름을 정해주고 finish를 눌러주면 개발을 위한 초기 설정은 마무리 도;ㅣㄴ다.

 

 

라이브러리 매니저가 다운로드 된 상태

 

프로젝트 이름을 정해주고 나면 그래픽 UI로 칩셋의 핀 설정이 가능한 화면이 나온다.

 

 

칩의 안정적인 동작을 위해 clock configuration을 활용해서 동작 clock을 정해줘야 한다.

 

현재는 내부의 oscilator만 할당되어진 상태,

내가 생각하는  cube ide의 장점은 내가 동작시키려는 clock에 대한 값을 자동으로 계산해주는 것에 있다고 생각된다.

 

 

 

 

F411 board library 다운
밑에 설명처럼 ctrl + space

 

 

 

 

 

 

#include <stdint.h>

#define RCC_BASE	0x40023800
#define RCC_CR		(RCC_BASE + 0x00)
#define RCC_CFGR	(RCC_BASE + 0x08)
#define RCC_AHB1	(RCC_BASE + 0x30)


#define GPIOA_BASE (0x40020000)
#define GPIOA_MODER (GPIOA_BASE + 0x00)
#define GPIOA_OTYPER (GPIOA_BASE + 0x04)
#define GPIOA_OSPEEDR (GPIOA_BASE + 0x08)
#define GPIOA_PUPDR (GPIOA_BASE + 0x0C)
#define GPIOA_ODR (GPIOA_BASE +0x14)

void delay(uint32_t ms)
{
	uint32_t temp = ms * 1000;

	while(temp) temp--; //0이 될때까지...
}

int main()
{
	//RCC_CR
	//0x40023800 |= (1<<0); incorrect, bec 0x40023800 it is not address, constant. need casting
	//(unsigned long *)0x40023800 |= (1<<0); //(unsinged long *) means it is address, long
	//(uint32_t *)0x40023800 |= (1<<0); //(uint32_t *) means it is address, usigned int 32bit , 0번에 있는 값만 1로 shift하겠다 (|= (1<<0) )


	//*(uint32_t *)RCC_CFGR &= ~(1<<0);
	//*(uint32_t *)RCC_CFGR &= ~(1<<1);
	*(uint32_t *)RCC_CFGR &= ~((1<<1)|(1<<0));  //HSI Selected
	*(uint32_t *)RCC_AHB1 |= (1<<0); // GPIOA clock enable

	//*(uint32_t *)RCC_CR =*(uint32_t *)RCC_CR (1<<0); //*(type *)address constant
	*(uint32_t *)RCC_CR |= (1<<0); // HSI ON


	*(uint32_t*) GPIOA_MODER |=(1<<10); //GPIOA 5pin output mode.
	*(uint32_t*) GPIOA_OTYPER &=~(1<<5);//GPIOA 5pin push-pull.
	*(uint32_t*) GPIOA_OSPEEDR |=(1<<11)|(1<<10);//GPIOA 5pin high speed.
	*(uint32_t*) GPIOA_PUPDR |=(1<<10); //GPIOA 5pin pull-up

	while(1)
	{
		*(uint32_t *)GPIOA_ODR |= (1<<5); // 해당 비트를 1로 만듬
		delay(500);
		*(uint32_t *)GPIOA_ODR &= ~(1<<5); // 해당 비트를 0으로 만듬
		delay(500);

	}

	return 0;
}

 

 

728x90

'[Harman] 하만 반도체 설계 > STM32' 카테고리의 다른 글

[STM32] GPIO Blink ,StandLight  (1) 2024.01.09