STM32中,所有GPIO外设挂载在APB2外设总线上
寄存器就是特殊的存储器,内核可以通过APB2总线对寄存器进行读写,来输出或读取电平
分输出,输入寄存器,数字1代表高电平,数字0代表低电平
STM32是32位单片机,寄存器为32位,所以是低16位有对应端口
寄存器存储数据,驱动器增加信号驱动能力
输入模式:
GPIO口内部自带上下拉给默认输入电平,数字端口,输入只有高电平和低电平,外部没有数字信号为默认输入电平
引脚浮空,输入电平极容易受外接干扰而改变,避免输入数据不确定
上下拉阻值大,为弱上拉和弱下拉,不影响正常输入
内置斯密特触发器:对输入电压整形,输入电压大于某一阈值,输出变为高,小于某阈值,输出变为低,外界数字信号,也可能会失真,避免信号波动造成输出抖动
触发器前面前面接一跟模拟输入电路连接ADC,ADC接收模拟量
触发器后面额外引出一根线,为复用功能输入,给其他读取端口的外设用,比如串口输入,接收数字量
GPIO输出结构:
输出数据寄存器只能整体读写,位设置/清除寄存器可以设置输出数据寄存器的一个位
直接读输出数据寄存器,用位运算更改某一位,再写回去,或者直接用位设置/清除寄存器
前者麻烦效率低,操作io不好,后者在位设置某一位置1,就会给输出数据寄存器对应位置1,不需要操作的位写0,内部电路会去操作,某一位清0就在位清除寄存器对应位写1
还可以读写 STM32中的“位带”区域,类似51的的位寻址,STM32分配了地址区域,映射了RAM和外设寄存器所有的位,读写这里,相当于映射的那位,不管这个方法,我们学库函数操作,就是用位设置/清除寄存器
MOS管 电子开关,由输出数据寄存器信号控制,输出1把电路接到VDD,输出0把电路接到VSS
输出模式有以下几种
推挽输出/强推输出模式:MOS管可以接到VDD或者VSS,为强上拉或者强下拉,STM32对io有绝对控制权,控制电平高低
开漏:只能接到VSS,输出1相当于断开,高阻模式,高阻态没有驱动能力
可以拿来作通信协议的驱动方式,如I2C,多机通信,可以避免各个设备之间的干扰,或者输出5V信号,外接上拉电阻到5V电源
关闭模式:就是输入模式,端口电平由外部控制
浮空输入必须接入连续的驱动源,不能出现悬空状态
配置成输入模式的时候,输出电路是断开的,但是输出模式的时候,输入电路电路不会断开
一个端口只能有一个输出,可以有多个输入,所以输出的时候,输入电路不用断开,也能顺便输入我输出的电平
复用输入,普通输入也有效,为顺便读取一下,除了模拟输入,其他模式输入模式都有效,可以读取到
外设gpio可以看手册里的表
寄存器也可查表
位清除/设置寄存器高16位位清除,低16位位设置
还有个专门清除寄存器,低16位,这样上面那个寄存器低16位设置,这个低16位清除,都用16位数据方便,同时设置清除就用上面那个,同步性,同步性要求不高,就先设置再清除
端口配置锁定寄存器:锁定端口配置,防止意外更改,
LED连接电路配电阻,防止烧毁,配亮度
很多单片机高电平弱驱动,低电平强驱动,是结合了许多具体外设的特性,比如高电平驱动的外设多不需要强驱动能力,低电平驱动的外设则相反
三极管开关是最简单的驱动电路,功率微大的外设,用io口驱动导致负担过重
单侧基极,箭头发射极,剩下集电极,pnp,箭头入,低电平三极管导通
npn相反,三极管的连接,发射极要靠近电源,发射极和基极之间需要开启电压才能通断
端口配置低/高寄存器,四个位定一个模式,16个口要64位,所以是有两个配置寄存器
GPIO输出速度:限制输出引脚最大翻转速度,为了低功耗和稳定,功耗要求不高就最高速