안녕하세요. 오늘은 NUCLEO-F103RB 보드로 HAL라이브러리를 사용하여 GPIO READ를 제어해보겠습니다.
먼저 사용할핀을 INPUT 설정하겠습니다
PC12는 회로도상 아무것도 연결해있지않고 풀업설정을 하지않고 테스트해보겠습니다
/* USER CODE BEGIN WHILE */
while (1) {
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_12))
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,1); // LED ON
}
else
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,0); // LED OFF
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
PC12의 상태에따라서 PA5번핀의 상태가 변하는 코드입니다. 핀의 상태를 읽는 함수는 HAL_GPIO_ReadPin입니다. return값으로 1/0가 옵니다
PC12를 아무것도 연결을 안하면 플로팅상태이므로 PA5핀이 흔들립니다
PC12에 GND를 연결하거나 VDD를 연결하면 PA5핀은 안정적인 상태가 됩니다
플로팅상태를 방지하기위해서 내부풀업설정을 해보겠습니다
내부풀업을 했으므로 PC12핀에 아무것도 연결하지않았을때 HIGH이고, PA5는 HIGH로 일정합니다.
내부풀다운설정을하면 내부풀업과 반대입니다
그럼 이제 사용한 함수들을 분석해보겠습니다
입력을 받을때 사용했던 HAL_GPIO_ReadPin 입니다
/**
* @brief Reads the specified input port pin.
* @param GPIOx: where x can be (A..G depending on device used) to select the GPIO peripheral
* @param GPIO_Pin: specifies the port bit to read.
* This parameter can be GPIO_PIN_x where x can be (0..15).
* @retval The input port pin value.
*/
GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
GPIO_PinState bitstatus;
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)GPIO_PIN_RESET)
{
bitstatus = GPIO_PIN_SET;
}
else
{
bitstatus = GPIO_PIN_RESET;
}
return bitstatus;
}
GPIO_Pin에 따라서 GPIO_PIN_SET(1) 혹은 GPIO_PIN_RESET을 return 합니다
입력관련 레지스터입니다. IDR은 Input Data Register의 줄임말입니다. IDR레지스터를 읽어서 핀이 HIGH상태인지 LOW상태인지 판단을 합니다
풀다운상태일때 IDR12가 0입니다
PC12에 VDD를 연결하면 IDR12가 1로 변합니다
HAL_GPIO_Init함수에서도 입력이므로 설정하는 부분이 있습니다
/*Configure GPIO pin : PC12 */
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
이전글에서 HAL_GPIO_Init함수를 분석한 글이 있으니 그 글 참고바랍니다.
https://wowon.tistory.com/294
'STM32 > 이론' 카테고리의 다른 글
STM32 외부인터럽트 알아보기 (0) | 2024.11.09 |
---|---|
STM32 PWM TIMER 알아보기 (0) | 2023.12.31 |
STM32 GPIO제어하기OUTPUT_3편(MX_GPIO_Init함수 분석) (1) | 2023.10.22 |
STM32 GPIO제어하기OUTPUT_2편(컨피규레이션 설정) (1) | 2023.10.14 |
STM32 GPIO제어하기 OTUPUT_1편(LED깜빡이기) (0) | 2023.10.02 |