STM32/이론

STM32 GPIO제어하기 INPUT MODE

원원 2023. 11. 18. 20:54

안녕하세요. 오늘은 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 GPIO제어하기OUTPUT_3편(MX_GPIO_Init함수 분석)

안녕하세요. 오늘은 NUCLEO-F103RB 보드로 HAL라이브러리를 사용하여 GPIO OUTPUT를 제어해보겠습니다. 3편에서는 OUTPUT을 설정할때 사용하는 코드를 분석해보겠습니다 우선 GPIO의 설정을 하는 MX_GPIO_Init

wowon.tistory.com