ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • stm32 GPIO
    STM32F103C8 2022. 6. 14. 09:24
    잘못된 정보가 있을 수 있습니다.

     

    GPIO(general-purpose input/output) 다용도 입출력은 입력이나 출력을 사용자가 직접 제어할 수 있는 핀을 말한다.

    컴퓨터 혼자서는 할 수 있는 게 없다. 온도를 받고 싶으면 온도센서가 제공하는 통신이나 전압값을 알아보고 그 값을 읽어야 하고 처리한 데이터를 외부에 전송하려면 wifi든 bluetooth든 전압이든 출력을 보내야 한다.

    gpio은 외부에 입력을 받거나 출력을 주거나 하는 통신에 이용된다.

     

    그렇다면 GPIO는 어떻게 작동하는 걸까?

    stm32 gpio

    stm32f103c8 Reference Manuals 160쪽을 보면 gpio 다이어그램과 관련 레지스터가 나온다.

     

     

    먼저 output을 보자

    빨간색이 Vdd를 출력하고 파란색은 Vss 출력한다. (보통 Vdd는 3.3v~5v이고 Vss는 접지에 연결돼있다.)

     

    3.3v를 출력하기 위해서는 bit set/reset registers를 출력으로 설정하고 나면 output data register가 바뀌고 output control이 off 된다.(아마도)  P-MOS는 not 게이트를 거쳐 on이 되어 전류가 흐르고 N-MOS는 off가 되므로 전류가 통하지 않는다.

    따라서 Vdd의 전류가 I/O pin에 흐르게 된다.

     

    즉 bit set/reset registers를 조작하면 출력을 조작할 수 있다.

     

    registers는 어떻게 조작할까?

     

    io를 제어하는 방식에는 pio, mmio, Isolated io 등이 있는데

    stm32는 MMIO 방식을 사용한다.

    메모리 맵 입출력(Memory-mapped I/O, MMIO) 방식은 메모리의 주소 공간을 분리하지 않고 하나의 메모리 공간에 배치한다. 따라서 GPIO registers는 특정 RAM 주소와 1:1로 대응된다.

     

    다른 종류의 io를 알고 싶다면 여기를 보자. https://blackinkgj.github.io/IO/

     

    stm32f103c8 Reference Manuals 51쪽을 보면 GPIO port A는 0x4001 0400 ~ 0x4001 07FF의 주소를 차지하는 것을 알 수 있다.

     

    정리하자면 CPU로 RAM의 0x40010400 ~ 0x400107FF 주소에  정해진 방식대로 데이터를 쓰면 GPIO port A의 입출력을 제어할 수 있다.

    댓글

Designed by Tistory.