GPIOA 下有十六个 口 从pa0----pa15
每组GPIO口都有7个寄存器
如果你的设备有 7 组GPIO口 , 那么寄存器就有, 7 * 7 = 49个寄存器,
比如:GPIOA 有16个GPIO 那就是由这7个寄存器进行控制
GPIOx_CRL : 端口配置低寄存器 (模式配置) 配置 0–7 IO口的模式和速度
GPIOx_CRH : 端口配置高寄存器 (模式配置) 配置 8–15 IO口的模式和速度
为什么需要两组呢 ? 因为是32位的寄存器 ,一共只有32个位 ,但是我们配置每一个IO口, 32个位配置 16个io口, 每个IO口配置需要4个位 , 32 /4 = 8 一共寄存器最多控制8个,但是我们有16个口, 所以说 需要两个寄存器来控制 , 64位 / 4 =16 . GPIOx_CRL 控制 低位 8个, 0—7. GPIOx_CRH控制高位 8个, 8—15 .
每个IO口 由4个位来控制, 每一位分成两半 , 一半用来配置输入输出模式和速度, 一半用来配置到底是哪个模式, 低寄存器和高寄存器是一样的.
GPIOx_IDR : 端口输入数据寄存器 (控制IO口输出高低电频)
因为每一组IO 只有16个io口, 所以这个寄存器只用到 16位, 0—15 后面16位不用,是无效的,
第0位 对应 pa0 … 我们把这个位