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