關於GPIO口的一些概念性問題

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   io   資料   

一、什麼是GPIO?

  GPIO的英文全稱是General-Purpose IO ports,也就是通用輸入輸出口。

  在嵌入式系統中,經常需要控制許多結構簡單的外部裝置或者電路,這些裝置有的需要通過CPU控制,有的需要CPU提供輸入訊號。並且,許多裝置或電路只要求有開/關兩種狀體就夠了,比如LED的亮與滅。對這些裝置的控制,使用傳統的串口或者並口就顯得比較複雜,所以,在嵌入式微處理器上通常提供了一種“通用可程式化I/O連接埠”,也就是GPIO。

  一個GPIO連接埠至少需要兩個寄存器,一個做控制用的“通用IO連接埠控制寄存器”,還有一個是存放資料的“通用I/O連接埠資料寄存器”。資料寄存器的每一位是和GPIO的硬體引腳對應的,而資料的傳遞方向是通過控制寄存器設定的,通過控制寄存器可以設定每一位引腳的資料流向。

二、STM32中關於GPIO口的介紹

  在STM32中每個GPI/O連接埠有兩個32位配置寄存器(GPIOx_CRL,GPIOx_CRH),兩個32位元據寄存器(GPIOx_IDR和GPIOx_ODR),一個32位置位/複位寄存器(GPIOx_BSRR),一個16位複位寄存器(GPIOx_BRR)和一個32位鎖定寄存器(GPIOx_LCKR)。

  根據資料手冊中列出的每個I/O連接埠的特定硬體特徵, GPIO連接埠的每個位可以由軟體分別配置成多種模式。

     ─ 輸入浮空

     ─ 輸入上拉

     ─ 輸入下拉

       ─ 類比輸入

     ─ 開漏輸出

     ─ 推挽式輸出

     ─ 推挽式複用功能

     ─ 開漏複用功能

三、常用GPIO口寄存器描述

  1、連接埠配置寄存器(GPIOx_CRL,GPIOx_CRH)

    GPIOx_CRL和GPIOx_CRH分別對應GPIO口的低8位和高8位輸入輸出口,每個寄存器的4位對應GPIO口的一個連接埠的配置模式,其中4位中的低兩位代表配置為輸入還是輸出模式,記為MODEy[1:0],具體的模式配置情況如下:

   00:輸入模式(複位後的狀態)

     01:輸出模式,最大速度10MHz

     10:輸出模式,最大速度2MHz

         11:輸出模式,最大速度50MHz

 高兩位通常對應於什麼輸入輸出方式,記為CNFy[1:0],具體的模式配置情況如下:

   在輸入模式(MODE[1:0]=00): 

     00:類比輸入模式 

     01:浮空輸入模式(複位後的狀態)  

       10:上拉/下拉輸入模式 

       11:保留 

   在輸出模式(MODE[1:0]>00):

       00:通用推挽輸出模式

       01:通用開漏輸出模式

       10:複用功能推挽輸出模式

       11:複用功能開漏輸出模式

  2、連接埠輸入資料寄存器(GPIOx_IDR)

      位31:16 保留,始終讀為0。

      位15:0   連接埠輸入資料,這些位為唯讀並只能以字(16位)的形式讀出。讀出的值為對應I/O口的狀態。

  3、連接埠輸出資料寄存器(GPIOx_ODR)

      位31:16 保留,始終讀為0。

      位15:0   連接埠輸出資料,這些位可讀可寫並只能以字(16位)的形式操作。

  4、連接埠位設定/清除寄存器(GPIOx_BSRR)

 

  

  5、連接埠位清除寄存器(GPIOx_BRR)

  

 

四、一個簡單的關於寄存器的操作

   MiniSTM32關於狀態指示燈的串連

      

  由圖示可以看出DS0和DS1分別接在GPIOA8和GPIOD2上,由此可以對寄存器的操作來實現流水燈實驗

  void LED_Init(void)
  {
    RCC->APB2ENR |= 1 << 2; //使能PORTA時鐘
    RCC->APB2ENR |= 1 << 5; //使能PORTB時鐘
    GPIOA->CRH &= 0xFFFFFFF0;//清空PA8
    GPIOA->CRH |= 0x00000003;//將PA8設定成通用推挽輸出模式
    GPIOA->ODR |= 1 << 8;       
    GPIOD->CRL &= 0xFFFFF0FF;//清空PD2
    GPIOD->CRL |= 0x00000300;//將PD2設定成通用推挽輸出模式
    GPIOD->CRL |= 1 << 2;
  }

  int main(void)
  {
    Stm32_Clock_Init(9);     //初始化時鐘
    delay_init(72);       //延時初始化
    LED_Init();               //配置相應寄存器

    while(1)
    {
      LED0 = 0;      //點亮DS0
      LED1 = 1;
      delay_ms(500);
      LED0 = 1;             //點亮DS1
      LED1 = 0;           
      delay_ms(500);
    }

  }

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.