STM32 GPIO 설정 이해


41

STM32 표준 주변기기 라이브러리에서 GPIO를 구성해야합니다.

그러나 구성 방법을 잘 모르는 3 가지 기능이 있습니다.

  • GPIO_InitStructure.GPIO_Speed
  • GPIO_InitStructure.GPIO_OType
  • GPIO_InitStructure.GPIO_PuPd

에서 GPIO_Speed 에서 선택할 수있는 4 개 가지 설정

GPIO_Speed_2MHz  /*!< Low speed */
GPIO_Speed_25MHz /*!< Medium speed */
GPIO_Speed_50MHz /*!< Fast speed */
GPIO_Speed_100MHz

어떤 속도를 선택해야하는지 어떻게 알 수 있습니까? 고속 또는 저속을 사용할 때의 장단점이 있습니까? (예 : 전력 소비?)

에서 GPIO_OType 에서 선택할 수있는 2 개 가지 설정

GPIO_OType_PP // Push pull
GPIO_OType_OD // Open drain

어느 것을 선택해야하는지 아는 방법? 오픈 드레인 및 푸시 풀이 란 무엇입니까?

에서 GPIO_PuPd 에서 선택할 수있는 3 개 가지 설정

GPIO_PuPd_NOPULL // No pull
GPIO_PuPd_UP     // Pull up
GPIO_PuPd_DOWN   // Pull down

이 설정은 푸시 풀의 초기 설정과 관련이 있다고 생각합니다.


관련 : 명시 적 AVR / 아두 이노, PIC 등으로 기본적으로 지원하지 않는 마이크로 컨트롤러의 "오픈 드레인"모드로 강제하는 방법 : electronics.stackexchange.com/a/354993/26234
가브리엘 스테이 플스

답변:


45
  • GPIO_PuPd (풀업 / 풀다운)

    디지털 회로에서는 신호선이 "부동"되지 않도록하는 것이 중요합니다. 즉, 항상 높은 상태 또는 낮은 상태에 있어야합니다. 부동 상태에서는 상태가 결정되지 않으며 몇 가지 유형의 문제가 발생합니다.

    이 문제를 해결하는 방법은 신호선의 저항을 Vcc 또는 Gnd에 추가하는 것입니다. 이런 식으로, 라인이 능동적으로 높거나 낮게 구동되지 않으면 저항은 전위를 알려진 레벨로 드리프트시킵니다.

    ARM (및 기타 마이크로 컨트롤러)에는이를위한 내장 회로가 있습니다. 이렇게하면 회로에 다른 부품을 추가 할 필요가 없습니다. 예를 들어 "GPIO_PuPd_UP"을 선택하면 신호 라인과 Vcc 사이에 저항을 추가하는 것과 같습니다.

  • GPIO_OType (출력 유형) :

    푸시 풀 : 대부분의 사람들이 "표준"으로 생각하는 출력 유형입니다. 출력이 낮아지면 실제로 "접지"됩니다. 반대로, 출력이 높음으로 설정되면 출력은 Vcc로 적극적으로 "밀어집니다". 단순화하면 다음과 같습니다.

    푸시 풀

    반면에 오픈 드레인 출력은 한 방향으로 만 활성화됩니다. 핀을지면쪽으로 당길 수는 있지만 높이로 구동 할 수는 없습니다. 상단 MOSFET이없는 이전 이미지를 상상해보십시오. 접지로 당기지 않을 때 MOSFET은 단순히 비전 도성이므로 출력이 플로팅됩니다.

    열린 배수구

    이러한 유형의 출력을 위해서는 회로에 풀업 저항이 추가되어 로우로 구동되지 않을 때 라인이 높아질 수 있습니다. 외부 부품을 사용하거나 GPIO_PuPd 값을 GPIO_PuPd_UP으로 설정하여이를 수행 할 수 있습니다.

    이름은 MOSFET의 드레인이 내부적으로 어떤 것과도 연결되어 있지 않다는 사실에서 비롯됩니다. MOSFET 대신 BJT를 사용할 때 이러한 유형의 출력을 "오픈 콜렉터"라고도합니다.

  • GPIO_Speed

    기본적으로 출력 신호의 슬 루율 (상승 시간 및 하강 시간)을 제어합니다. 슬 루율이 빠를수록 회로에서 더 많은 노이즈가 방출됩니다. 슬루 레이트를 느리게 유지하고 특정 이유가있는 경우에만 슬루 레이트를 높이는 것이 좋습니다.


감사! 큰 대답을 위해;), 부동 상태에있을 때 다른 문제에 대해 조금 더 설명 하시겠습니까?
Tim

3
중간 입력 전압에서 일정 시간 동안 머무르면 입력 블록에서 상위 및 하위 FET를 부분적으로 켜고이를 통해 전원 공급 장치를 부분적으로 단락시켜 과도한 전력 소비 또는 (특히 심한 경우) ) 잠재적 손상.
Chris Stratton

@Tim 예, Chris Stratton이 방금 말한 것 :)
bitsmack

3
@Tim 또한, 선이 떠있을 때 전압 레벨을 교란하기가 매우 쉽습니다. 용량 성 상호 작용으로 인해 회로 주위로 손을 흔드는 것만으로 입력 상태를 변경할 수 있습니다.
bitsmack

1
@Tim 실제로 응용 프로그램에 따라 다릅니다. 스위치 (또는 버튼)를 읽는다면 실제로 중요하지 않습니다. 다른 구성 요소와 인터페이스하는 경우 인터페이스에 따라 다릅니다. 예를 들어, SPI 통신의 경우 CS 회선이 액티브 로우입니다. 이 경우 풀업 저항이 필요하므로 CS가 실수로 낮아지지 않습니다. 항상 마이크로 컨트롤러로 능동적으로 라인을 구동한다면 이것이 불필요하다고 생각할 수도 있습니다. 그러나 마이크로 컨트롤러가 초기화되기 전에는 어떻습니까? 아니면 재설정? 풀업 저항은 모든 모호성을 제거합니다.
bitsmack

5

GPIO 속도는 GPIO가 생성 할 수있는 최대 주파수입니다. 설정을 낮추면 전원을 절약 할 수 있습니다.

출력 유형은 핀이 고저를 주장하는지 (푸시 풀) 또는 출력이 드레인에서 핀에 연결된 FET의 게이트를 켤지 여부입니다 (오픈 드레인). 다른 핀을 짧게 빼 내지 않고 버스를 낮게 당길 수 있도록 연결된 핀이 필요한 경우 편리합니다.

풀업 저항은 핀 출력을 파워 레일에 연결하고 풀다운 저항은 저항을 통해 접지에 연결합니다. 이 비트는 무엇보다도 비트가 높은 임피던스 상태에 있더라도 핀의 전압을 제어합니다. 스폿 스위치를 사용하여 디지털 입력 값을 변경하는 것과 같은 작업을 수행하는 것이 중요합니다. 스위치가 열린 상태에서도 입력을 예측할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.