在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种工作方式(输入模式下四种,输出模式下四种)
则一组GPIO 16位需要16*4=64位端口配置寄存器,故CRL控制0~7位,CRH控制8~15位
00 01 10 11 输入 模拟输入 浮空输入 上拉/下拉输入 保留 输出 通用推挽输出 通用开漏输出 复用推挽输出 复用开漏输出
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)
不是很懂,好像不太常用,略过。