본문 바로가기

01. 쉬운 stm32 GPIO, LED제어

반응형

 

 

강좌 시리즈 보러 가기

잡동사니 세상 :: stm32 레지스터 직접 접근 (소개) (tistory.com)

 

stm32 레지스터 직접 접근 (소개)

저번에 올린 3개짜리 짧은 포스트는 중단하고, 이번에 산 책 내용을 기반으로 stm32f103zet6를 제어해보려고 합니다. 라이브러리를 사용하는 방식보단, 레지스터에 직접적으로 접근하여 보다 Microcon

pkr7098.tistory.com

 

 

LED 다루는 방법

(이해한 내용을 기반으로 쉽게 설명했으니

원래 의미와 다소 차이가 있을 수 있다.)

 

일단 LED 켜는 것부터

 

더보기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stm32f10x.h"
 
void init_port() {
  GPIO_InitTypeDef LED;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
 
 
  LED.GPIO_Pin = 0x0004//(2번 핀 사용 0b0000000000000100
  LED.GPIO_Mode = GPIO_Mode_Out_PP; //Push Pull, Output
  LED.GPIO_Speed = GPIO_Speed_50MHz; //GPIO 출력 속도(on, off 바뀌는 속도) 50MHZ로 설정
 
  GPIO_Init(GPIOG, &LED); //GPIO 설정 끝 & 시작
}
 
//////////////////////////////////////////////////////////////////////////////////////////
 
int main(void) {
  init_port(); //위에서 만든 함수 (LED 핀 설정 & 초기화 함수
 
  GPIO_SetBits(GPIOG, GPIO_Pin_2); // GPIOG에서 2번 핀을 HIGH상태로 만든다.
};
cs

LED 핀은 PG2번을 사용했다.

그랬기 때문에 GPIOG와 그에 관한 설정들만 했다.

2번 핀에 HIGH 신호를 보내는 코드이다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stm32f10x.h"
 
void init_port() {
  GPIO_InitTypeDef LED;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
 
 
  LED.GPIO_Pin = 0x0004//(2번 핀 사용 0b0000000000000100
  LED.GPIO_Mode = GPIO_Mode_Out_PP; //Push Pull, Output
  LED.GPIO_Speed = GPIO_Speed_50MHZ; //GPIO 출력 속도(on, off 바뀌는 속도) 50MHZ로 설정
 
  GPIO_Init(GPIOG, &LED); //GPIO 설정 끝 & 시작
}
 
//////////////////////////////////////////////////////////////////////////////////////////
 
int main(void) {
  init_port(); //위에서 만든 함수 (LED 핀 설정 & 초기화 함수
 
  GPIO_ResetBits(GPIOG, GPIO_Pin_2); // GPIOF에서 2번 핀을 LOW상태로 만든다.
};
cs

2번 핀에 LOW신호를 보내는 코드이다.

위의 GPIO_SetBits를 GPIO_ResetBits으로 바꾼 것뿐이다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stm32f10x.h"
 
void init_port() {
  GPIO_InitTypeDef LED;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
 
 
  LED.GPIO_Pin = 0x0004;
  LED.GPIO_Mode = GPIO_Mode_Out_PP;
  LED.GPIO_Speed = GPIO_Speed_50MHz;
 
  GPIO_Init(GPIOG, &LED);
}
 
//////////////////////////////////////////////////////////
 
int main(void) {
  init_port();
 
  GPIO_SetBits(GPIOG, GPIO_Pin_2);

cs

 

 

#include "stm32f10x.h"  stm32에관한 것들을 가지고 온다.

void init_port()   LED관련 핀 초기화 함수

GPIO_InitTypeDef LED;  클럭 인가를 위한 구조체 선언(LED말고 다른 것도 가능하다. ex GPIO_InitTyperDef Arduino;)

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE); GPIOG에 클럭신호를 준다.(비트 연산자를 통해 한 번에 다른 GPIO포트 설정도 가능하다. ex RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG | RCC_APB2Periph_GPIOF, ENABLE);)

 

LED.GPIO_Pin = 0x0004; 위의 선언된 LED의 요소 중 GPIO_Pin(핀 설정)에 0x0004 대입(=0b0000000000000100 2번 핀)

LED.GPIO_Mode = GPIO_Mode_Out_PP; 설정된 핀을 출력으로 설정(PP는 PushPull의 약자로 그냥 저렇게 써라)

LED.GPIO_Speed = GPIO_Speed_50MHz; GPIO on/off 속도를 50MHZ로 설정(즉 on을 off로 또는 off를 on로 바꿀 때 50MHZ(=20나노초)가 걸린다는 뜻이다.)

GPIO_Init(GPIOG, &LED); 설정한 LED를 GPIOG에 적용

 

 

GPIO_SetBits(GPIOG, GPIO_Pin_2); GPIOG 중 2번 핀을 Set으로 만들어준다. (Set은 쉽게 말해서 on상태(HIGH상태)를 뜻한다.)

 

결과

 

 

 

 

 

 

 

LED 끄기

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stm32f10x.h"
 
void init_port() {
  GPIO_InitTypeDef LED;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG, ENABLE);
 
 
  LED.GPIO_Pin = 0x0004
  LED.GPIO_Mode = GPIO_Mode_Out_PP;
  LED.GPIO_Speed = GPIO_Speed_50MHZ; 
 
  GPIO_Init(GPIOG, &LED); 
}
 
//////////////////////////////////////////////////////
 
int main(void) {
  init_port();
 
  GPIO_ResetBits(GPIOG, GPIO_Pin_2);
cs

 

켜는 코드에서 GPIO_SetBits(GPIOG, GPIO_Pin_2);를

GPIO_ResetBits(GPIOG, GPIO_Pin_2);로 바꾼 것뿐이다.

 

stm32는 핀을 사용하기 위해, 무조건 클럭 신호를 넣어줘야하기 때문에 init_port부분은 건드릴 필요가 없다.

(init_port()함수가 GPIOG 핀에 클럭 신호를 인가해주는 함수이다.)

 

GPIO_ResetBits(GPIOG, GPIO_Pin_2);는 GPIOG의 2번 핀을 Reset시키는 함수이다.

Reset은 off상태(LOW상태)를 의미한다.

 

 

결과

 

 

 

쉽게 설명하는 것이 목적이었기 때문에

실제 기능과 다른 것들이 있을 수 있다.

 

 

나의 식물일지 어플 보러 가기

https://pkr7098.tistory.com/155

 

나의 식물일지 어플리케이션

최근에 취미로 만든 어플리케이션을 테스트버전으로 출시하게 되었습니다. https://play.google.com/apps/testing/com.keyand.plant_temp 여러분이 키우고 계신 식물에 대한 일지를 작성할 수 있는 어플로 깔끔

pkr7098.tistory.com

 

반응형