stm32学习笔记——GPIO组及相关寄存器

在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) 

不是很懂,好像不太常用,略过。

你可能感兴趣的:(stm32,stm32,gpio)