在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32單片機GPIO寄存器

            STM32單片機GPIO寄存器

            作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

            每個GPIO端口有兩個32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分別控制每個端口的高八位和低八位,如果IO口是0-7號的話,則寫CRL寄存器,如果IO口是8-15號的話,則寫CRH寄存器,兩個32位數(shù)據(jù)寄存器(GPIOx_IDR,GPIOx_ODR)一個是只讀作輸入數(shù)據(jù)寄存器,一個是只寫作輸出寄存器,一個32位置位/復(fù)位寄存器(GPIOx_BSRR),一個16位復(fù)位寄存器(GPIOx_BRR)和一個32位鎖定寄存器(GPIOx_LCKR)。常用的IO端口寄存器只有四個:CRH,CRL,IDR,ODR。

            本文引用地址:http://www.biyoush.com/article/201611/323042.htm

            數(shù)據(jù)手冊中列出的每個I/O端口的特定硬件特征, GPIO端口的每個位可以由軟件分別配置成多種模式。每個I/O端口位可以自由編程,然而I/0端口寄存器必須按32位字被訪問(不允許半字或字節(jié)訪問)。

            另外,STM32的每個端口使用前都要將其時鐘使能,STM32的GPIO的時鐘統(tǒng)一掛接在APB2上,具體的使能寄存器為RCC_APB2ENR,該寄存器的第2位到第8位分別控制GPIOx(x=A,B,C,D,E,F,G)端口的時鐘使能,當外設(shè)時鐘沒有啟用時,程序不能讀出外設(shè)寄存器的數(shù)值,如打開PORTA時鐘:

            RCC->APB2ENR|=1<<2; //使能PORTA時鐘

            使能外設(shè)時鐘后,GPIOA的十六位就可以按照設(shè)定的狀態(tài)工作了,之后就是具體設(shè)置哪一位了以第八位為例即高位的首位,在GPIOx_CRH寄存器中進行設(shè)置,GPIOA的每一位都有該寄存器的四位來設(shè)定相應(yīng)的參數(shù),這四位中的高兩位(CNF0,CNF1)設(shè)置GPIO的輸入輸出模式,低兩位(MODE0,MODE1)是設(shè)置GPIO的輸出頻率,具體可以參考STM32參考手冊。

            GPIOA->CRH&=0XFFFFFFF0; //清掉PA8原來的設(shè)置,同時屏蔽其它端口,不影響其它端口的設(shè)置

            GPIOA->CRH|=0X00000003;//PA8 推挽輸出
            十六進制中的3 換成二進制 00 11 前兩位00表示推挽輸出,11代表輸出頻率50Mhz,若CRH|=0x4,表示模擬輸入模式(ADC用),0x3表示推挽輸出模式(作輸出口用,50M速率),0x8表示上/下拉輸入模式(做輸入口用),0xB表示復(fù)用輸出(使用IO口的第二功能,50M速率)。
            這是對一位的操作,當然也可以多位操作,因為STM32對GPIO操作必須是32位全字操作,設(shè)置完成后GPIOA的第8位就可以使用了之后給GPIOA->ODR=0x xxxx xxxx送數(shù)據(jù)就行了

            STM32單片機,有了端口才能和外界聯(lián)系,學(xué)會了端口控制,才能更好地利用外設(shè)。建立和外界的聯(lián)系,發(fā)揮自身的優(yōu)點。
            首先介紹一下基本的GPIO相關(guān)的寄存器:
            1, GPIOX_CRL 低8位端口配置寄存器
            這個寄存器主要是對配置管腳是輸入還是輸出:
            其中1)MODEy[1:0]主要是配置是輸入端口還是輸出端口的。配置為輸出得時候還可以配置輸出的管腳速度等級。
            2)CNFy[1:0] 主要是兩種形式,在端口配置輸入的時候,即MODEy[1:0]位00(輸入),用來配置輸入的模式,主要是模擬輸入,浮空輸入,上拉模式和下拉模式。
            3)CNFy[1:0]在端口配置為輸出的時候,用來控制輸入的模式。具體看手冊吧。
            總得來說,就是MODEy[1:0] 先配置管腳是輸入還是輸出,是輸入就繼續(xù)配置CNFy[1:0]來配置輸出管腳的連接模式。要是輸出的話,就繼續(xù)配置MODEy[1:0]的管腳速度速度等級,之后再配置管腳的連接模式。上拉,下拉,推免,開漏等等。具體運用的時候看看手冊就明白了。
            2, GPIOX_CRH 高8位端口配置寄存器
            和GPIOX_CRH 完全一樣,只是端口換成高8位了。不說了,看看就明白了!
            3, GPIOX_ODR 端口輸出數(shù)據(jù)寄存器
            學(xué)過AVR的都知道,輸出的時候有輸出數(shù)據(jù)寄存器,STM32也一樣。思想COPY過來,就自然知道了GPIOX_ODR是做什么的了。不過要注意的是,這個玩意不能一個位一個位的去操作,還是51的簡單啊,不過原子大哥已經(jīng)把那個端口映射可操作位段,不明白,還是看自己的吧。一個GPIOA端口就16位,自然的32位的GPIOX_ODR 就只有低16位有效了,想輸出什么就給這個寄存器賦值就OK了。
            或者用GPIOA->ODR |=(1<ODR &=(0<
            完成了這一步,我們就可以軟件延時,控制輸出流水燈了。前提是開啟設(shè)備時鐘哦。
            4, GPIOX_IDR 端口輸入數(shù)據(jù)寄存器
            這個寄存器用到的前提是端口配置為輸入模式時候。什么時候想讀取值,就什么時候讀取吧。大家都明白。
            5, GPIOX_BSRR 端口位設(shè)置/清除寄存器
            這個寄存器我用了一些,別的也不會。就感覺超級好用。用起來很方便。比如你端口配置好了。想PA5輸出“1”。就GPIOA->BSRR |=(1<<5);5是對應(yīng)的哦。輸出“0”,一樣的
            GPIO->BSRR |=(1<<(5+16));為什么加16,你明白的。
            6, GPIOX_BRR 端口位清除寄存器
            晚上百度了一下,有了GPIOX_BSRR 為什么還要有GPIOX_BRR ,沒看明白。有了拿來就用就對了。一樣的和GPIOx_BSRR一樣的用法。專門清除的。GPIOA->BRR |= (1<
            7, 端口配置鎖定寄存器GPIOX_LCKR,鎖定了當然就不能修改了。保護了。避免不小心造成的失誤。以后用到了在琢磨吧。


            關(guān)鍵詞: STM32單片機GPIO寄存

            評論


            技術(shù)專區(qū)

            關(guān)閉