CRH、CRL、ODR和IDR的使用
? ? ? ? STM32的每個I/O口都由7個寄存器控制:2個32位端口配置寄存器CRL和CRH;2個32位的數據寄存器IDR和ODR;1個32位的置位復位寄存器BSRR;1個16位的復位寄存器BRR;1個32位的鎖存寄存器LCKR;
? ? ? ? 而我們最常用的有4個:CRL/CRH/IDR/ODR;所以一般情況下我們只要配置這四個is OK。而CRH和CRL作用是完全一樣的,CRH用于控制GPIOX(X表示A---G)的高8位(Pin15---Pin8),而CRL用于控制GPIOX(X表示A---G)的低8位(Pin7----Pin0)。每個模式的pin腳設置需要4bit來完成,即MODE[1:0]負責設置模式位,CNF[1:0]負責設置配置位。
? ? ? ? 首先,用到哪個IO使能哪組IO時鐘,使能GPIO對應的時鐘,RCC->APB2ENR|=1<<2;? // 使能PORTA時鐘(后續會提到),其次是配置其工作模式, GPIO的八種工作模式:
? ? ? ?1、浮空輸入GPIO_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1
? ? ? ?2、帶上拉輸入GPIO_IPU——IO內部上拉電阻輸入
? ? ? ?3、帶下拉輸入GPIO_IPD——IO內部下拉電阻輸入
? ? ? ?4、模擬輸入GPIO_AIN ——應用ADC模擬輸入,或者低功耗下省電
? ? ? ?5、開漏輸出GPIO_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出為1時,IO口的狀態由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變為低電平或不變。可以讀IO輸入電平變化,實現C51的IO雙向功能
? ? ? ?6、推挽輸出GPIO_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的
? ? ? ?7、復用功能的推挽輸出GPIO_AF_PP ——片內外設功能(I2C的SCL,SDA)
? ? ? ?8、復用功能的開漏輸出GPIO_AF_OD——片內外設功能(TX1,MOSI,MISO.SCK.SS)
? ? ? ?see a example:GPIOC->CRL&=0XFFFF0FFF;? ? ? ? ? ? ?//清除PC3該位原來的設置
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? GPIOC->CRL|=0X00008000;? ? ? ? ? ? ? ? //設置下拉輸入
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? GPIOC->ODR==0<<3;? ? ? ? ? ? ? ? ? ? ? ? ? //ODR暫存將從端口發送的數據為0,即輸出低
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?GPIOC->IDR==0<<3;? ? ? ? ? ? ? ? ? ? ? ? ? ?//外部輸入為0
總結
以上是生活随笔為你收集整理的CRH、CRL、ODR和IDR的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么程序员找不到工作:4 个恐怖故事
- 下一篇: STM32寄存器操作端口模式CRL/CR