FW 심화 과정/[2] STM32심화실습

0722 브레드 보드의 스위치, LED를 GPIO로 제어하기

천숭이 2022. 7. 25. 22:37

Register 역할
RCC_AHB1ENR GPIO 사용을 위한 클록 설정
사용 원하는 핀 번호 1로 설정
GPIOx_MODER 입출력을 설정해주는 레지스터
00 : INPUT     01 : GPO MODE
정해진 MODE를 토대로 핀 번호당 2비트씩 설정해준다
GPIOx_IDR 전기적 상태 확인이 가능
GPIOx_ODR 핀번호마다 전기적 신호 변경이 가능

 

#include <stdio.h>
//#include "stm32f4xx.h"

#define rRCC_AHB1ENR    (*(int *)0x40023830)   // -> GPIO CLK ON
#define rGPIOE_MODER    (*(int *)0x40021000)   // -> LED와 연결된 핀 
#define rGPIOE_ODR       (*(int *)0x40021014)
#define rGPIOC_MODER    (*(int *)0x40020800)   // -> 스위치와 연결된 핀 
#define rGPIOC_IDR       (*(int *)0x40020810)

int fputc(int ch, FILE * fp) 
{ 
   //ITM_SendChar(ch);
   
   return ch; 
}

int main() 
{ 
   // clock enable for PORT-C, PORT-E
   rRCC_AHB1ENR = rRCC_AHB1ENR | (0x1<<2) | (0x1<<4);
   printf("%#010x \n", rRCC_AHB1ENR);s
   // PE7 --> output
   rGPIOE_MODER = rGPIOE_MODER & ~(0x3 << 14);
   rGPIOE_MODER = rGPIOE_MODER | (0x1 << 14);
   // PC5 --> input
   rGPIOC_MODER = rGPIOC_MODER & ~ (0x3<<10);
   
   while (1)
   {
      
      if (rGPIOC_IDR & (0x1<<5))
      {
         rGPIOE_ODR = rGPIOE_ODR | (0x1 << 7);
         
      }
      else
      {
         rGPIOE_ODR = rGPIOE_ODR & ~ (0x1 << 7);
      }
      
   } 
}

C포트와 E포트를 enable 한다 : 20

7번 핀의 방향을 00으로 초기 설정해준다 : 22

  LED 출력이므로 7번 핀을 01로 설정해준다 : 23

스위치를 입력으로 설정하기 위해서 00으로 설정한다 : 25

  C5에 전기적 신호가 들어옴을 확인하면, : 30

 LED를 키기 위해 핀E7에 연결된 전기적 신호를 1로 변경 : 32

C5에 전기적 신호가 들어오지 않으면, : 35

     LED그기 위해 핀E7에 연결된 전기적 신호를 0으로 변경 : 37

 

 

< 실습 결과 사진 >