文章目录
STM32 的 IO 口可以由软件配置成如下 8 种模式:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏复用功能
(1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 浮空输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_IPU 上拉输入
(5)GPIO_Mode_Out_OD 开漏输出
(6)GPIO_Mode_Out_PP 推挽输出
(7)GPIO_Mode_AF_OD 复用开漏输出
(8)GPIO_Mode_AF_PP 复用推挽输出
STM32 的很多 IO 口都是 5V 兼容(FT)的(5v可以被识别为高电平),这些 IO 口在与 5V 电平的外设连接的时候很有优势,具体哪些 IO 口是 5V 兼容的,可以从该芯片的数据手册管脚描述章节查到(I/O Level 标 FT 的就是 5V 电平兼容的)。
GPIO工作方式
4种输入模式:
输入浮空
输入上拉
输入下拉
模拟输入
4种输出模式
开漏输出
开漏复用功能
推挽式输出
推挽式复用功能
3种最大翻转速度:
-2MHZ
-10MHZ
-50MHZ
GPIO的输入工作模式
两个开关不接通
上开关接通
下拉电阻连上
常用于AD转换等
GPIO的输出工作模式
内部没有驱动能力
区别是由外设模块决定输出
推挽方式
推挽输出
可以输出强高低电平,连接数字器件
开漏输出
只可以输出强低电平,高电平要靠外部电阻拉高,输出端相当于三极管的集电极,要得到高电平状态需要山上拉电阻
配置寄存器GPIOx_CRL/CRH
GPIOx_CRL/CRH每四个位控制一个IO口,CRL控制标号为0-7的口,CRH控制标号为8-15的口
单个GPIO口的配置
数据寄存器GPIOx_IDR/ODR
IDR 是一个端口输入数据寄存器,只用了低 16 位。该寄存器为只读寄存器,并且只能以
16 位的形式读出。
要想知道某个 IO 口的状态,你只要读这个寄存器,再看某个位的状态就可以了。
ODR 是一个端口输出数据寄存器,也只用了低 16 位。该寄存器为可读写,从该寄存器读
出来的数据可以用于判断当前 IO 口的输出状态。
端口位设置/清除寄存器GPIOx_BSRR
设为0的位是不变的
和ODR不同。ODR如果设置为0,则是设置为0;
清除寄存器GPIOx_BRR
好了,寄存器学完了
开始点灯!
库函数版本
找到硬件连接位置
gpio头文件函数
1、初始化函数
第一个参数指定io口
第二个定义速度
第三个定义模式
Pin参数
speed参数
mode参数
2.读取电平函数
3.设置输出函数
跑马灯程序
1.使能IO口时钟,调用RCC_APB2PeriphClockCmd函数
不同的IO组调用的时钟使能函数不同
!!操作IO口之前都要使能相应的时钟,否则无法使用
1.RCC_APB2Periph参数
这里使能GPIOA口,将GPIOA的参数名RCC_APB2Periph_GPIOA引入就行了
2.NewState参数
使能或者不使能
程序:
或者
2.初始化IO口
调用函数GPIO_Init()
选择推挽输出
引脚选择A8和D2
选择50mhz
程序:
问题:如果头文件出现如图x号
说明没有把头文件路径加进去
添加头文件路径
添加一下路径就行了
3.设置io口输出电平
GPIO_SetBits()设置高电平
GPIO_ResetBits()设置低电平
参数传入IO组和引脚
程序:
主函数
main
编译没问题
下载
ok
寄存器版
步骤
1.使能IO口时钟
2.初始化Io口模式
3.操作IO口
1.使能IO口时钟
配置寄存器
RCC_APB2ENR