STM32/이론

STM32 GPIO제어하기OUTPUT_2편(컨피규레이션 설정)

원원 2023. 10. 14. 18:37

안녕하세요. 오늘은 NUCLEO-F103RB 보드로 HAL라이브러리를 사용하여 GPIO OUTPUT를 제어해보겠습니다.
1편에서 사용방법을 간단하게 확인해봤었고 2편에서는 자세히 알아보겠습니다

사용 보드: NUCLEO-F103RB
개발환경 : STM32CubeIDE

 

1편에서 설정했던 PA5를 GPIO_Output으로 설정했었고 PA5의 컨피규레이션 옵션을 알아보겠습니다

*GPIO output level
GPIO의 초기상태를 Low로 할지 High로 할지 선택하는 옵션입니다. 선택하는 옵션에 따라서 아래의 코드가 변합니다

MX_GPIO_Init함수는 처음 프로젝트를 만들면 호출하는 함수이고 GPIO를 세팅하는 코드들이 모여있는 함수입니다.


*GPIO mode
GPIO의 모드를 Push pull/Open drain으로 설정하는 옵션입니다.
Push pull은 출력의 상태가 0이면 LOW, 1이면 HIGH를 내보내는 옵션입니다. (P-mos, N-mos 사용)
Open drain은 외부의 전원을 사용할때 사용하는 옵션입니다. P-mos는 없고 N-mos만 사용합니다.
일반적으로 mcu의 전원으로 HIGH/LOW를 제어하는 상황이라면 Push pull로 설정하면 됩니다

 

*GPIO Pull-up/Pull-down
Output에서는Pull-up/Pull-down이 비활성화가 됩니다

 

*Maximum output speed
GPIO 속도를 정할 수 있습니다. HIGH =>LOW로 갈때, LOW=>HIGH로 갈때 속도입니다.

HIGH-> LOW, LOW->HIGH로갈때 빨강색처럼 직각으로 변하지않고 주황처럼 변합니다. 상태가 변할때 경사도가 있는데 이러한 경사도를 Slew Rate라고 부릅니다 ( Slew Rate =  v/t)

빠른 GPIO스위칭은 전력 소비를 증가시킬 수 있습니다. 저전력 제품에는 느린 GPIO가 효율적입니다.
빠른 GPIO스위칭은 노이즈 및 안정성에 문제가 있을 수 있습니다
LOW/MEDIUM/HIGH 설정이 가능합니다.

/** @defgroup GPIO_speed_define  GPIO speed define
  * @brief GPIO Output Maximum frequency
  * @{
  */
#define  GPIO_SPEED_FREQ_LOW              (GPIO_CRL_MODE0_1) /*!< Low speed */
#define  GPIO_SPEED_FREQ_MEDIUM           (GPIO_CRL_MODE0_0) /*!< Medium speed */
#define  GPIO_SPEED_FREQ_HIGH             (GPIO_CRL_MODE0)   /*!< High speed */

LOW: 0x2 (MAX 2Mhz)
MEDIUM : 0x1 ( MAX  10Mhz)
HIGH : 0x3 (MAX  50Mhz)


3편에서는 GPIO설정할때 사용하는 레지스터와 코드를 알아보겠습니다