STM32 강좌

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

plainy 0 6,129 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

Category
글이 없습니다.
글이 없습니다.
Facebook Twitter GooglePlus KakaoStory NaverBand