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

wjddd12님의 프로필 이미지
wjddd12

작성한 질문수

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

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

MX_GPIO_Init(); 사용 시 질문입니다

해결된 질문

작성

·

113

0

MX_GPIO_Init(); 를 들어가면 HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, GPIO_PIN_SET); 가 나오고 , 이코드는

`if (PinState != GPIO_PIN_RESET)

{

GPIOx->BSRR = GPIO_Pin;

}

else

{

GPIOx->BSRR = (uint32_t)GPIO_Pin << 16u;

}

즉, 핀 상태에 따라 led불을 온오프 시키는 역할을 하는것으로 이해하고 있습니다!

그렇다면 main문에서 MX_GPIO_Init() 을 사용할때는 while문 안에 /*HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, 1);

HAL_Delay(100);

HAL_GPIO_WritePin(GPIO_LED_GPIO_Port, GPIO_LED_Pin, 0);

HAL_Delay(100);*/ 이 코드가 없어도 동작해야하는 것이 아닌가 라고 생각했습니다.

그래서 실제로 while문 내부를 다 지우고 MX_GPIO_Init() 만 쓰니까 동작이 안 되더라구요.

제가 잘 못 이해하고 있는 부분이 무엇인지를 확실시를 못해서 질문드립니다! 감사합니다.

답변 1

1

MX_GPIO_Init()은 GPIO Port와 Pin의 초기 상태 설정을 위해 사용되는 함수입니다. 기본적인 프로젝트 생성시 main함수 내 while 반복문 이전 1회 실행됩니다. 따라서 질문자 분이 설정한 Pin의 초기상태에 따른 설정만 되고 이후 출력상태 변화에 영향을 주지 않게됩니다. 또한 해당 함수는 입력받는 변수가 없기때문에 해당 함수를 while문에 적어두는 것 만으로는 Pin의 설정에 변화를 임의로 줄 수 없습니다.

 

기존 while 반복문 내에 작성된 것과 같이 HAL드라이버를 사용하여 PIN의 출력상태의 변화를 주어야합니다. 동작여부를 판단 할 수 있을 것으로 보입니다.

wjddd12님의 프로필 이미지
wjddd12

작성한 질문수

질문하기