新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32-GPIO學習筆記

        STM32-GPIO學習筆記

        作者: 時間:2016-11-23 來源:網絡 收藏
        STM32F103RB有4個IO口(A~D),每個IO口都有7個寄存器控制,他們分別是:

        端口配置寄存器(32位,共兩個,CRL和CRH)

        本文引用地址:http://www.104case.com/article/201611/320439.htm

        數據寄存器(32位,共兩個,IDR和ODR)

        置位/復位寄存器(32位,一個,BSRR)

        復位寄存器(16位,一個,BRR)

        鎖存寄存器(32位,一個,LCKR)

        常用的IO寄存器只有四個,即CRL、CRH、IDR、ODR,他們分別是設置IO口工作狀態和輸入/輸出數據的,其中CRL和CRH共2個32位寄存器控制16個IO口的狀態(CRL和CRH完全一樣,只是CRL控制的是低8位輸出口GPIOx(0:7),CRH控制的是高八位GPIOx(8:15)),即每四位控制一個IO口狀態(高2位CNF,低2位MODE),寄存器情況如圖所示:

        常用的狀態配置:

        0X0 模擬輸入模式(ADC用)
        0X3 推挽輸出模式 (作輸出口用50Mhz速率)
        0X8 上/下拉輸入模式 (作輸入口用)

        0XB 復用輸出 (作IO口的第二功能50Mhz速率) 注意:這個是第二功能即復用輸出功能

        舉例:

        我們甚至PORTC的11位位上拉輸入,12位為推挽輸出,代碼如下:

        GPIO->CRH&=0XFFF00FFF; //清除原來的設置,不影響其他位

        GPIO->CRH|=0X00038000; //PC11輸入,PC12輸出

        GPIO->ODR=1<<11; //PC11上拉IDR 輸入數據寄存器,只使用了低16位,只讀寄存器,同理,ODR也只使用了低16位,位可讀寫寄存器。

        IDR寄存器描述如圖:

        STM32和AVR單片機IO口的比較:

          補充遇到的一個問題:http://www.openedv.com/posts/list/0/378.htm#94993

          SPI 讀寫W2516 引腳配置問題

          GPIOA->CRL&=0X000FFFFF; //先將Pin5 6 7 對應的配置為清零,其他位不變
          GPIOA->CRL|=0XBBB00000; //PA5.6.7復用推挽輸出(50MHz)
          GPIOA->ODR|=0X7<<5; //PA5.6.7上拉

          PA5-SCLK;PA6-MISO;PA7-MOSI;

          第二行中,為什么PA6 也配置為推挽輸出呢? PA6 不是應該配置為輸入嗎 ?

          為什么最后還有用GPIOA->ODR|=0X7<<5 配置為上拉呢? ODR寄存器不是只有在輸入模式設置上拉或者下拉時才用嗎 ?

          原子的解答:

          1,請注意,這里是復用輸出.在復用功能下面,輸入輸出的方向,完全由內部控制.不需要你的程序處理.
          2,配置為上拉,是常用的設置,這樣設置的好處,就是可以讓你的IO處于一個電平,而很多時候,外設默認的電平就是高電平的.所以設置為高,是有道理的.

          復用功能下,操作ODR是不能輸出的!但是ODR是可以操作的,可以設置上拉。



          關鍵詞: STM32GPIO學習筆

          評論


          相關推薦

          技術專區

          關閉
          主站蜘蛛池模板: 房山区| 浙江省| 通海县| 司法| 益阳市| 江华| 灌南县| 棋牌| 安化县| 桂阳县| 若羌县| 遂平县| 綦江县| 子长县| 格尔木市| 法库县| 固阳县| 汉沽区| 崇文区| 上思县| 蚌埠市| 陵川县| 旬邑县| 伊川县| 翁牛特旗| 德阳市| 扎赉特旗| 延安市| 沂南县| 壶关县| 鄱阳县| 咸阳市| 朔州市| 汝州市| 丹棱县| 安康市| 赞皇县| 广灵县| 牙克石市| 霍林郭勒市| 远安县|