在stm32f103zet6中有7个GPIO组(GPIOA,GPIOB......GPIOG)
每组包含16位IO口(以A为例,GPIOA[0..15])
以组为单位,每组有7个寄存器,分别是:
2个32位端口配置寄存器(GPIOx_CRL和GPIOx_CRH)
每1位IO口需要4位寄存器控制
2位控制输入输出模式
(00)输入模式????????(01)最大10Mhz输出? ? ? ? (10)最大2Mhz输出? ? ? ? (11)最大50Mhz输出
2位控制8种工作方式(输入模式下四种,输出模式下四种)
| 00 | 01 | 10 | 11 | 输入 | 模拟输入 | 浮空输入 | 上拉/下拉输入 | 保留 | 输出 | 通用推挽输出 | 通用开漏输出 | 复用推挽输出 | 复用开漏输出 | 则一组GPIO 16位需要16*4=64位端口配置寄存器,故CRL控制0~7位,CRH控制8~15位?
1个32位端口输入数据寄存器(GPIOx_IDR)
低16位对应该GPIO组IO端口的读取数据(即输入模式下的结果,当然输出模式下也可以直接从IDR读取输出的结果),高16位保留始终为0。该寄存器是只读的。
?1个32位端口输出数据寄存器(GPIOx_ODR)
低16位控制对应GPIO组的16个IO端口的输出数据,该16位可读可写,且只能以字(16位)操作。高16位保留始终读取为0。用法举例:上拉/下拉输入模式下ODR0/1对应下拉/上拉;通用推挽/开漏输出模式下ODR0/1对应输出0/1。
?1个32位端口置位/复位寄存器(GPIOx_BSRR)
低16位控制置1,高16位控制清0,当某一位为1时执行功能,为0时不改变ODR的值,某一位同时被置1和清0时,置位优先级高于复位。低16位和高16位都只能写入且只能通过字(16位)进行操作。
?1个16位复位寄存器(GPIOx_BRR)
该寄存器作用较小,在F1中的作用和BSRR的高位一致。
1个32位锁存寄存器(GPIOx_LCKR)?
不是很懂,好像不太常用,略过。
|