基本原理
GPIOF->BSRR = 0x00000001;
通用输入输出端口,就相当于一大堆导线,只不过可以通过代码对这些导线做到开关控制。每根导线相当于一条导线。对于输入也是看每条导线上的电压,电压高就是1,电压低就是0,这样就可以表示任何可以数字化的信息。
输入输出模式
绝大多数引脚都可以做IO口,通过复用可以做其他功能。有8种工作模式(4种输入,4种输出)
输入模式可以选择不同的上下拉,这样相当于节省了电路,避免在外面再接电阻了。
- 推挽输出,强高低电平,适合数字器件
- 开漏输出,强低电平,高电平需要外部上拉。适合电流型驱动,吸收电流能力强(啥叫吸收电流能力强)
输入模式没有开漏和推挽的区别,也就是输入端没有CMOS。
- 浮空
- 上拉
- 下拉
- 模拟
IO口有4种速度模式可选
寄存器
对应设置的寄存器
STM32F7 每组通用 I/O 端口包括 4 个 32 位配置寄存器(MODER、OTYPER、OSPEEDR 和 PUPDR)、2 个 32 位数据寄存器(IDR 和 ODR)、1 个 32 位置位/复位寄存器 (BSRR)、 1 个 32 位锁定寄存器 (LCKR) 和 2 个 32 位复用功能选择寄存器(AFRH 和 AFRL)等
IO要看好高电平有效,还是低电平有效
输出,低电平有效,外部可能是上拉到电源;高电平有效,外部接到地
输入,外部是低电平有效,内部就要上拉,如果0,表示来输入了;
软件部分
寄存器
直接写二进制代码
HAL库
利用API的方式,设置相关寄存器。设置了很多宏,就不用写二进制数字,更符合人的习惯。
只是更好理解,工作量还是一样
IO复用
IO扩展
每个IO口都可作为中断
参考信息查询
选型手册
datasheet
参考手册
施密特触发器是什么?