新聞中心

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

        STM32學習筆記--GPIO的設置

        作者: 時間:2016-11-26 來源:網絡 收藏
        STM32的IO口可以由軟件配置成8種模式:

        1、輸入浮空
        2、輸入上拉
        3、輸入下拉
        4、模擬輸入
        5、開漏輸出
        6、推挽輸出
        7、推挽式復用功能
        8、開漏復用功能

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

        STM32的每個IO端口都有7個寄存器來控制。他們分別是:配置模式的2個32位的端口配置寄存器CRL和CRH;2個32位的數據寄存器IDR和ODR;1個32位的置位/復位寄存器BSRR;一個16位的復位寄存器BRR;1個32位的鎖存寄存器LCKR;這里我們僅介紹常用 的幾個寄存器,我們常用的IO端口寄存器只有4個:CRL、CRH、IDR、ODR。

        STM32的IO口位配置表如表3.1.1.1所示:


        STM32輸出模式配置如表3.1.1.2所示:


        該寄存器的復位值為0X4444 4444,從上圖可以看到,復位值其實就是配置端口為浮空輸入模式。從上圖還可以得出:STM32的CRL控制著每個IO端口(A~G)的低8位的模式。每個IO端口的位占用CRL的4個位,高兩位為CNF,低兩位為MODE。這里我們可以記住幾個常用的配置,比如0X0表示模擬輸入模式(ADC用)、0X3表示推挽輸出模式(做輸出口用,50M速率)、0X8表示上/下拉輸入模式(做輸入口用)、0XB表示復用輸出(使用IO口的第二功能,50M速率)。

        給個實例,比如我們要設置PORTC的11位為上拉輸入,12位為推挽輸出。代碼如下:
        GPIOC->CRH&=0XFFF00FFF;//清掉這2個位原來的設置,同時也不影響其他位的設置
        GPIOC->CRH|=0X00038000; //PC11輸入,PC12輸出
        GPIOC->ODR=1<<11;//PC11上拉
        IDR是一個端口輸入數據寄存器,只用了低16位。該寄存器為只讀寄存器,并且只能以16位的形式讀出。該寄存器各位的描述如下圖所示:



        要想知道某個IO口的狀態,你只要讀這個寄存器,再看某個位的狀態就可以了。使用起來是比較簡單的。

        ODR是一個端口輸出數據寄存器,也只用了低16位。該寄存器為可讀寫,從該寄存器讀出來的數據可以用于判斷當前IO口的輸出狀態。而向該寄存器寫數據,則可以控制某個IO口的輸出電平。該寄存器的各位描述如下圖所示:



        在此,我們可以總結一下,對于學過AVR的人來說,我們都知道AVR的IO口由3個寄存器控制:DDR、 PORT、PIN。這里我們可以拿STM32的IO控制寄存器和AVR的來個類比:
        1,
        STM32的CRL和CRH就相當于AVR的DDR寄存器,用來控制IO口的方向,只不過STM32的CRL和CRH功能更強大一點罷了。
        2,
        STM32的ODR就相當于AVR的PORT,都是用來控制IO口的輸出電平或者上下拉電阻的。
        3,
        STM32的IDR就相當于AVR的PIN,都是用來存儲IO口當前的輸入狀態(高低電平)的。
        除此之外,STM32還有BSRR、BRR、LCKR等幾個寄存器用于控制IO口,這點是AVR所沒有的。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 宁都县| 萨迦县| 临武县| 孟连| 温泉县| 博罗县| 邯郸县| 通山县| 华亭县| 大石桥市| 钦州市| 宜兰市| 中阳县| 阜康市| 苗栗市| 通江县| 年辖:市辖区| 井冈山市| 桐城市| 永兴县| 乐清市| 勃利县| 涿州市| 南华县| 台山市| 家居| 石渠县| 东乡县| 治多县| 绥阳县| 富锦市| 惠州市| 克东县| 临武县| 眉山市| 盐源县| 合作市| 焉耆| 长葛市| 长寿区| 神池县|