인프런 커뮤니티 질문&답변

wjddd12님의 프로필 이미지
wjddd12

작성한 질문수

[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.

HAL드라이브 없이 GPIO제어 하기 2

GPIO라이브러리없이 LED ON/OFF하기-주소번지 다른이유?

해결된 질문

작성

·

118

0

HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, GPIO_PIN_SET);

1.켠다

*(0x40011000) = (8192);

*reg2= 0x2000;

2.끈다

*(0x40011000)= (8192<<16);

*reg2= (0x2000 << 16);

이라고 해석이 되었는데 , 실제 디버깅 시에는 *(0x40011000) 가 아니라 *(0x40011010) 일때 동작하는 이유가 무엇인가요?

답변 1

0

ojtube5님의 프로필 이미지
ojtube5
지식공유자

실제 디버깅 시에는 (0x40011000) 가 아니라 (0x40011010) 일때 동작하는 이유가 무엇인가요?

 

좀 더 자세히 설명을 드릴게요.

GPIO의 레지스터가 있고, Cport에 해당하는 것은 0x40011000이 맞아요.

그런데 이 안에 또 세부적으로 나뉘는게 있어요. (레퍼런스 메뉴얼 171쪽 부터 보시면 나와요)

CRL, CRH, IDR, BSRR 등등.

근데, gpio를 set하고 reset하려면

BSRR을 조작을 해야하고요.

BSRR의 offset이 0x10입니다.

그래서 0x40011010이 되는 거예요. (3:28 초 쯤에 보면 GPIOx->BSRR 이라고 나와요.)

wjddd12님의 프로필 이미지
wjddd12

작성한 질문수

질문하기