【浅析STM32之GPIO寄存器(CRL/CRH)配置 】
淺析STM32之GPIO寄存器(CRL/CRH)配置
一、前言GPIO的配置可以說是STM單片機(jī)的一大特色,通過GPIO的配置我們可以進(jìn)行多種不同模式的輸入和輸出,并且進(jìn)行配置的方式也有多種,一般我們?cè)谑褂玫倪^程中可能大多數(shù)都是通過庫函數(shù)來進(jìn)行配置的,這樣確實(shí)也比較方便,但有時(shí)候我們也不難免會(huì)使用寄存器進(jìn)行配置,代碼可能會(huì)更加簡潔,所以掌握寄存器的配置對(duì)我們來說也很重要。
特別是在進(jìn)行IIC的數(shù)據(jù)引腳輸入輸出配置時(shí)寄存器的作用十分重要
二、寄存器配置分析 #define IIC_INPUT_MODE_SET() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<28;}//改變PB7對(duì)應(yīng)位為1000(CNF[1:0]MODE[1:0]),設(shè)置成上拉或者下拉輸入 #define IIC_OUTPUT_MODE_SET() {GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<28;}//改變PB7對(duì)應(yīng)位為0011,設(shè)置成通用推挽輸出上述代碼是我在另一篇博文進(jìn)行IIC的數(shù)據(jù)引腳進(jìn)行輸入輸出配置的代碼,下面我會(huì)進(jìn)行相關(guān)寄存器的講解,然后進(jìn)行此代碼的分析,相信大家會(huì)一目了然了。
在stm32單片機(jī)中我們可以發(fā)現(xiàn),單片機(jī)的引腳分成了很多組GPIOA~GPIOE,并且每一組中又有0-15共16個(gè)引腳,每個(gè)IO口由4bit位來控制,那么一組IO就需要16*4 = 64bit,但我們使用的是32位的單片機(jī),所以又將64Bit分成了兩部分,高32bit又GPIOX_CRH寄存器來配置,低32bit由GPIOX_CRLj寄存器來進(jìn)行配置.對(duì)應(yīng)的引腳CRL為0到7CRH為8到15。
下面是官方數(shù)據(jù)手冊(cè)的內(nèi)容GPIOX_CRL
GPIOX_CRH
從上面我們可以看出不管是GPIOX_CRL還是GPIOX_CRH每個(gè)IO都是由CNF[1:0]和MODE[1:0]兩部分進(jìn)行配置選擇的,其中MODE[1:0]是進(jìn)行配置輸入還是輸出一般00為輸入 11為輸出。CNF[1:0]則配合MODE[1:0]進(jìn)行具體的模式配置。
譬如GPIOA中的GPIO_Pin_0配置上拉輸入模式 CNF[1:0] 則為10 MODE[1:0] 則為00 GPIOA->CRL &= 0xfffffff0;GPIOA->CRL |= 8; 0xfffffff0先進(jìn)行配置IO清零其余的保持不變,8為1000 相應(yīng)的IO配置成上拉輸入模式 三、代碼解析GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=8<<28;
首先我們從0x0FFFFFFF這句代碼中可以看出我們是進(jìn)行GPIO_Pin_7配置,先將7引腳Io的控制位清零其余的位保持不變,8 ----->1000 為CNF[1:0] 為10 上拉MODE[1:0] 為00輸入則將引腳配置成上拉輸入模式 8 << 28 可以看成 1111 1111 1111 1111 1111 1111 1111 1000 左移28位則變成了1000 1111 1111 1111 1111 1111 1111 1111,可以看出就是GPIO_Pin_7引腳進(jìn)行配置了上拉輸入模式。
同理
GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=3<<28;
首先從0X0FFFFFFF這句代碼我們是進(jìn)行GPIO_Pin_7配置,先將7引腳Io控制位清零其余位保持不變,3------>0011為CNF[1:0] 為00推挽,MODE[1:0]為11輸出則將相應(yīng)的引腳配置成推挽輸出,3<<28可以看出1111 1111 1111 1111 1111 1111 1111 0011 左移28位后變成了0011 1111 1111 1111 1111 1111 1111 1111,正好是將GPIO_Pin_7設(shè)置成了推挽輸出模式
上述內(nèi)容為個(gè)人觀點(diǎn)若有誤,望大佬指正。
總結(jié)
以上是生活随笔為你收集整理的【浅析STM32之GPIO寄存器(CRL/CRH)配置 】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: server多笔记录拼接字符串 sql_
- 下一篇: JQuery之常用插件