해결된 질문
작성
·
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의 출력상태의 변화를 주어야합니다. 동작여부를 판단 할 수 있을 것으로 보입니다.