STM32 강좌

STM32CubeMX - GPIO Lock으로 설정이 변경되는 것을 방지

plainy 0 6,908 2017.04.28 10:50

제품이 동작하면서 한 개의 핀을 Input, Ouput으로 번갈아 가며 사용할 경우가 있습니다.

하지만 대부분의 경우 한 개의 핀은 Input 또는 Output으로만 사용되며 이러한 GPIO 설정은 변경되지 않아야 합니다
그러나 프로그램 동작 중 오류로 인해 GPIO설정이 변경될 경우 제품에 오동작이 발생할 가능성이 있습니다.

 

이러한 경우를 대비하기 위해 STM32는 동작 중 I/O설정(I/O모드, 속도, Pull-Up/Down등)이 변경되는 것을 방지할 수 있는 Locking mechanism기능을 가지고 있습니다.

1b2c326854089e594a4d7c9632f3307b_1493344213_3059.png

 

GPIO Lock

GPIO Locking mechanism은 Reset전까지 아래 명시된 Register의 설정이 변경되는 것을 방지합니다.

GPIOx_MODER(Input/Output/Alternative/Analog설정)

GPIOx_OTYPER(Output모드 설정)

GPIOx_SPEEDR(출력 속도 설정)

GPIOx_PUPDR(Pull-Up/Pull-Down 설정)

GPIOx_AFRL, GPIOx_AFRH(Alternative Function설정)

 

GPIO Locking 사용

HAL_GPIO_LockPin 함수를 사용합니다.

GPIO의 설정이 변경되지 않도록 하기 위해서는 HAL_GPIO_LockPin함수를 사용합니다.

 

  1. /**
  2. * @brief Locks GPIO Pins configuration registers.
  3. * @note The locked registers are GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR,
  4. * GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH.
  5. * @note The configuration of the locked GPIO pins can no longer be modified
  6. * until the next reset.
  7. * @param GPIOx: where x can be (A..F) to select the GPIO peripheral for STM32F4 family
  8. * @param GPIO_Pin: specifies the port bit to be locked.
  9. * This parameter can be any combination of GPIO_PIN_x where x can be (0..15).
  10. * @retval None
  11. */
  12. HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

 

첫번째 인자는 GPIO이름입니다. GPIOA...GPIOF 중 하나를 입력합니다.

두번째 인자는 Pin번호입니다. GPIO_PIN_0...GPIO_PIN_15 중 하나를 입력합니다.

 

 

 

PC1과 PC2를 Output Mode로 설정한 후 MODE 레지스터가 Output Mode(0x01)로 설정된 것을 확인할 수 있습니다.

 

1b2c326854089e594a4d7c9632f3307b_1493344221_5135.png
 

 

 

PC1만 Lock을 설정한 후 PC1과 PC2를 Input Mode로 변경하였을 때 Lock이 설정된 PC1은 변경되지 않고 PC2만 Input Mode(0x00)로 변경되었습니다.

 

1b2c326854089e594a4d7c9632f3307b_1493344227_1479.png

 

 

GPIO Locking mechanisem은 잘못된 동작으로 인해 GPIO의 설정이 변경되는 것을 방지하는 기능으로 Reset이 발생되기 전까지 GPIO의 설정이 변경되지 않도록 하는 기능입니다.

 

Comments