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
< 실습 결과 사진 >