GPIO:标准输入输出端口
目录
上下分为输入输出两个部分,先看保护二极管,当电压>3.3v时上面三极管导通,电压被输出出去,当电压<0v时下面三极管导通,所以总的来说两个三极管是限制电压在0-3.3v起到保护电路的作用。
上导通下断开,为上拉模式,默认为高电平的输入模式。下导通上断开,为下拉模式,默认为低电平的输入模式。上下同时断开为浮空输入模式,不确定的引脚输入模式(常用)。
TTL肖特基(施密特)触发器,用来整形波形,当波形大于或小于某个阈值上下限时默认为高/低。同时只有高于上限或者低于下限时波形才会变化,其他保持原有高/低状态。
另外还有模拟输入,需要模拟量所以截止施密特触发器前面,接收模拟数据常常用于ADC等设备。
复用输入,用于其他外设,需要数字量接在施密特触发器后面,常用于接一些外设上面。
输入输出模式介绍:
推挽,开漏,关闭三种输出模式。
推挽模式又称强推输出模式,高低电平都有较强的驱动能力。在该模式下:
当数据寄存器为1时,上管导通,下管断开为高电平模式;为0时,上管断开,下管导通,为低电平模式。
开漏模式下p-mos无效,所以来高电平时,p-mos无效且n-mos断开。
所以只有数据寄存器为0时有低电平。1. 可以作为通信协议的驱动方式,如IIC
2. 多机通信时可以避免各个设备之间的互相干扰。3. 输出5v的电平信号。
关闭模式下两个moss管都无效,因此高低电平由外部设备来控制
对于点亮LED和按键输入来说,重要的是存在电压差。
如上图所示PB12应该配置下拉输入,PB13应该配置下拉输入。只看PB12会发现他外接的是一个3.3V的高电压,当按键按下时会产生一个高电平信号输入到引脚,如果该引脚配置的是上拉输入那么PB12的引脚电压在按键按下前后感受不到变化。
LED灯如果外接电源那么引脚配置低电平信号的话两端存在电压差即可点亮led。
寄存器配置
stm32的中文参考手册分享
STM32中文参考手册_V10_stm32中文参考手册v10-CSDN博客https://blog.csdn.net/mshlc0728/article/details/109476897
假如要给PA6配置10MHZ的推挽输出模式
1注意引脚从0开始数,每四个算一个引脚,所以24-27四位是我们需要配置的寄存器
2推挽00,10MHZ速度01,合起来就是0001
25-27清0:GPIOA->CRCL&=~(7<<25)
24置1:GPIOA->CRCL|=1<<24
高寄存器配置同理。
GPIO地址空间:
偏移地址:0x24
GPIOA 0TYPER地址:0x40020000+0x24=0x40020024.
0x40020028,后面的地址保留
经分析可知,每个 GPI0 组地址连续,每个GPI0 组中的配置寄存器都是地址连续的
可以使用宏定义 #defne GPIOA MODER_ADDRGPIOA MODER ADDR = 1
*((unsinged int*)0x40020000)
宏定义定义寄存器: