GPIO的简介:
GPIO它的学名叫通用输入输出端口,其实它就是单片机的I/O口,他承担着将芯片与外部设备连接实现与外部通讯,控制和数据采集的功能。
GPIO的结构:
STM32的GPIO的硬件结构图如图所示
嗯,我们能够看到的值有最右边①部分的I/O口引脚,剩下的都在芯片里面,如果想要系统的了解STM32的GPIO,读懂这个结构图还是非常有必要的,嘿嘿,一点一点来看吧。
①保护部分:
引脚上的两个保护二极管是用来保护I/O口引脚的,两个二极管的作用分两种情况
情况1当输入的电压过高时:上面的保护二极管导通。
情况2当输入的电压过低时:下面的保护二极管导通。
都是为了防止不正常的电压进入芯片然后烧毁芯片。
②输出驱动部分:
两个MOS管一个P-MOS管一个N-MOS管使得这部分可以进行有推挽输出和开漏输出,简单table about一下推挽输出和开漏输出,推挽输出你可以简单理解为两个MOS管都工作,输入高电平(3.3V)时P-MOS管导通I/O口输出高电平,输入低电平时N-MOS管导通I/O口输出低电平(0V),而开漏输出就只有N-MOS管工作,所以在这个模式下当输入输入低电平时N-MOS管导通I/O口输出低电平(0V),输入高电平时,I/O口输出状态为高阻态(就时那种不稳定的电平)。
应用场合:
推挽输出主要用在比如说经典之光流水灯,有源蜂鸣器等需要快速切换状态的场合。
开漏输出主要用在一些比如IIC等这些通讯场合。
③输出数据寄存器
我们上面一直说“当输入XX电平”,大家是不是会有疑问这个电平从哪里来呢,别急这就来说。这个电平就来自前面的这个输出数据寄存器,它是由ODR这个寄存器来进行控制,也就是我们可以通过控制这个寄存器来改变输出端口的电平。ODR这个寄存器具体控制操作去瞅瞅官方工作手册,这里就不再展开了。
④复用输出
我们在学习51单片机的时候,就知道经典的STC89C51 P3端口具有第二功能,比如P3.0 P3.1端口既可以作为普通的I/O口又可以进行串口通讯,我们32单片机I/O口同样具有第二功能,我们把它稍微的美化了一下叫端口复用。
⑤输入数据寄存器
单片机的I/O口通过上面的两个电阻可以被配置为上拉和下拉输入,经过施密特触发器转化为0,1信号存储在输入数据寄存器中,通过IDR寄存器就可以知道该引脚电平的状态。
⑥复用输入
和复用输出类似,把输入的信号传给其他的寄存器,共其他外设读取。
⑦模拟输入
当I/O口用来采集模拟信号的时候,就必须啊将端口设置为模拟输入模式,信号就不再经过施密特触发器,直接进入响应的片上外设。
好了到这里STM32的GPIO的结构就说完了,这是我个人在学习后的理解,里面可能有说的不深入的地方(悄悄说一声我是有硬件基础),这个得自己去补充硬件基础了!
下面我列举一下关于GPIO的工作模式,这些工作模式最好我们还是去记住他,如果英文好,根本不需要记,就可以直接的翻译出来
最后附上常用的操作GPIO的函数(HAL库)
1 HAL_GPIO_Writepin函数
HAL_GPIO_Writepin(GPIOX ,GPIO_PIN_X, GPIO_PIN_SET/RESET);
向X引脚写入高电平/低电平
2 HAL_GPIO_Readpin函数
HAL_GPIO_Readpin(GPIOX ,GPIO_PIN_X);
读取X引脚电平状态
3 HAL_GPIO_Togglepin(GPIOX ,GPIO_PIN_X);
使X引脚状态反转