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