<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32-GPIO學(xué)習筆記

STM32-GPIO學(xué)習筆記

作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò ) 收藏
STM32F103RB有4個(gè)IO口(A~D),每個(gè)IO口都有7個(gè)寄存器控制,他們分別是:

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

本文引用地址:http://dyxdggzs.com/article/201611/320439.htm

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

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

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

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

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

常用的狀態(tài)配置:

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

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

舉例:

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

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

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

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

IDR寄存器描述如圖:

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

    補充遇到的一個(gè)問(wèn)題:http://www.openedv.com/posts/list/0/378.htm#94993

    SPI 讀寫(xiě)W2516 引腳配置問(wèn)題

    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寄存器不是只有在輸入模式設置上拉或者下拉時(shí)才用嗎 ?

    原子的解答:

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

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



    關(guān)鍵詞: STM32GPIO學(xué)習筆

    評論


    相關(guān)推薦

    技術(shù)專(zhuān)區

    關(guān)閉
    国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
    <dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>