STM32單片機GPIO寄存器
每個(gè)GPIO端口有兩個(gè)32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分別控制每個(gè)端口的高八位和低八位,如果IO口是0-7號的話(huà),則寫(xiě)CRL寄存器,如果IO口是8-15號的話(huà),則寫(xiě)CRH寄存器,兩個(gè)32位數據寄存器(GPIOx_IDR,GPIOx_ODR)一個(gè)是只讀作輸入數據寄存器,一個(gè)是只寫(xiě)作輸出寄存器,一個(gè)32位置位/復位寄存器(GPIOx_BSRR),一個(gè)16位復位寄存器(GPIOx_BRR)和一個(gè)32位鎖定寄存器(GPIOx_LCKR)。常用的IO端口寄存器只有四個(gè):CRH,CRL,IDR,ODR。
本文引用地址:http://dyxdggzs.com/article/201611/323042.htm數據手冊中列出的每個(gè)I/O端口的特定硬件特征, GPIO端口的每個(gè)位可以由軟件分別配置成多種模式。每個(gè)I/O端口位可以自由編程,然而I/0端口寄存器必須按32位字被訪(fǎng)問(wèn)(不允許半字或字節訪(fǎng)問(wèn))。
另外,STM32的每個(gè)端口使用前都要將其時(shí)鐘使能,STM32的GPIO的時(shí)鐘統一掛接在A(yíng)PB2上,具體的使能寄存器為RCC_APB2ENR,該寄存器的第2位到第8位分別控制GPIOx(x=A,B,C,D,E,F,G)端口的時(shí)鐘使能,當外設時(shí)鐘沒(méi)有啟用時(shí),程序不能讀出外設寄存器的數值,如打開(kāi)PORTA時(shí)鐘:
RCC->APB2ENR|=1<<2;
使能外設時(shí)鐘后,GPIOA的十六位就可以按照設定的狀態(tài)工作了,之后就是具體設置哪一位了以第八位為例即高位的首位,在GPIOx_CRH寄存器中進(jìn)行設置,GPIOA的每一位都有該寄存器的四位來(lái)設定相應的參數,這四位中的高兩位(CNF0,CNF1)設置GPIO的輸入輸出模式,低兩位(MODE0,MODE1)是設置GPIO的輸出頻率,具體可以參考STM32參考手冊。
GPIOA->CRH&=0XFFFFFFF0;
GPIOA->CRH|=0X00000003;//PA8 推挽輸出
十六進(jìn)制中的3 換成二進(jìn)制 00 11 前兩位00表示推挽輸出,11代表輸出頻率50Mhz,若CRH|=0x4,表示模擬輸入模式(ADC用),0x3表示推挽輸出模式(作輸出口用,50M速率),0x8表示上/下拉輸入模式(做輸入口用),0xB表示復用輸出(使用IO口的第二功能,50M速率)。
這是對一位的操作,當然也可以多位操作,因為STM32對GPIO操作必須是32位全字操作,設置完成后GPIOA的第8位就可以使用了之后給GPIOA->ODR=0x xxxx xxxx送數據就行了
相關(guān)推薦
技術(shù)專(zhuān)區
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線(xiàn)
- 開(kāi)關(guān)電源
- 單片機
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機控制
- 藍牙
- PLC
- PWM
- 汽車(chē)電子
- 轉換器
- 電源管理
- 信號放大器
評論