前记
置位:|=
清零:&=~
使用寄存器点亮LED灯
![](https://img-blog.csdnimg.cn/img_convert/ef3ffd6713ad406a76259215dc17511d.png)
让绿灯亮PB0
![](https://img-blog.csdnimg.cn/img_convert/5b136fc00542f9c60dba509a0cf9d445.png)
PB0连接3.3V 低电平亮
端口输出寄存器ODR
![](https://img-blog.csdnimg.cn/img_convert/a361fcc3770d6abb43be6f8c84fad596.png)
APB2中的GPIO端口B的基地址为0x40010C00
![](https://img-blog.csdnimg.cn/img_convert/e8a9d55706d085ef2c66b893139c0687.png)
地址偏移为0x0C
控制PB0为1
清零 左移一位
故地址为0x40010C0C
配置IO口为输出(端口配置低寄存器CRL)
![](https://img-blog.csdnimg.cn/img_convert/8364669416fd0ac1ce85760498e76b17.png)
无偏移,地址为:0x40010C00
PB0位置上的值为00【推挽输出模式】(CNF0)01(MODE0)
输出模式,最大速度为10MHz
GPIOB端口时钟(RCC寄存器)
时钟是“心脏”
复位和时钟控制RCC在AHB系统总线上
![](https://img-blog.csdnimg.cn/img_convert/a821e54deef454f4ec593b0328d833b0.png)
![](https://img-blog.csdnimg.cn/img_convert/db2b7ea63ab5ca10f44aaa3e94619925.png)
偏移后地址为:0x40021000+0x18,即0x40021018
在第三位,故将1偏移3位
![](https://img-blog.csdnimg.cn/img_convert/0c67f2d4c6a5ba9e96dca68bb6ef7401.png)
GPIO功能框图
GPIO:通用输入输出端口的简称,STM32芯片的GPIO引脚与外部设备连接起来
![](https://img-blog.csdnimg.cn/img_convert/a58e93f6c0f75868a9ab79b2acc5440b.png)
2.推挽、开漏或关闭(端口配置低寄存器CRL、端口配置高寄存器CRH)
每四个位控制一个GPIO
推挽输出
可以输出高低电平,高电平由VDD决定(系统电源3.3V),低电平由VSS决定;
推挽结构是指两个三极管受两路互补信号控制,总在一个导通的时候另外一个截止;
输出高电平时,电流输出到负载,称为灌电流(推),输出低电平时,负载电流流向芯片,称为拉电流(挽)
![](https://img-blog.csdnimg.cn/img_convert/3ddbbac7921ab7b17f23c288d226d0dc.png)
开漏输出
只能输出低电平,如果要输出高电平,则需要外接上拉;
具有“线与”功能,如果一个为低,全部为低,多用于I2C和SMBUS总线
![](https://img-blog.csdnimg.cn/img_convert/1b6271bb81af3e1bdf547b12f2ff672d.png)
3.输出数据寄存器(端口输出寄存器ODR)
可以直接操作位设置位清除寄存器BSRR\BRR
![](https://img-blog.csdnimg.cn/img_convert/83ccca2688bb67c2905d0ab2cb5b6f38.png)
4.复用功能输出
来自于外设
数据寄存器
5.输入数据寄存器(端口输入寄存器IDR)
32位只用16位有效
上拉或者下拉输入
在CRL或CRH中配置成10;但具体上拉还是下拉通过BSRR来设置
GPIO输出初始化顺序
step1选定GPIO
step2 配置GPIO工作模式(CRL和CRH寄存器):输入还是输出
step3 控制GPIO输出高低电平(ODR、BRR和BSRR)
寄存器映射代码
![](https://img-blog.csdnimg.cn/img_convert/7238c8b3256696801e7bf47384fec3bc.png)
![](https://img-blog.csdnimg.cn/img_convert/bbc6dafb063db6c1bedad675470fa9b3.png)
Finish~