根据数据手册提供的信息,stm32的io口一共有八种模式,他们分别是:
四种输入模式
上拉输入:通过内部的上拉电阻将一个不确定的信号通过一个电阻拉到高电平。
下拉输入:把电压拉到GND。与上拉原理相似。
浮空输入:引脚内部什么都不接,处于浮空模式下,电平状态是不确定的。外部信号输入什么,IO口就是什么状态。
模拟输入:接收到的是连续的模拟信号,一般用于AD转换。
四种输出模式
推挽输出:可以输出高低电平,连接数字器件。在stm32中推挽电路由两个MOS管组成:输出高电平时P-MOS管导通,引脚联通VDD(3.3v)。输出低电平时N-MOS导通,引脚联通GND。**该方式既提高电路的负载能力,又提高开关速度。 **
开漏输出:无法直接输出高电平,要在外部连接上拉电阻才行,输出的电压由上拉电阻连接的电源决定。适合做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。开漏输出还有一个特性:线与。即很多开漏模式引脚连接在一起,只有当所有引脚都输出1时,才能够被上拉电阻拉到高电平。若有一个引脚为低电平,则所有引脚相当于接地。
复用推挽输出:简单来说就是给内部外设使用的推挽输出模式,
复用开漏输出:简单来说就是给内部外设使用的开漏输出模式
在STM32中,根据不同的使用场景,选用不同的IO模式:
GPIO的功能描述每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。
GPIO端口的每个位可以由软件分别配置成多种模式。
-输入浮空
-输入上拉
-输入下拉
-模拟输入
-开漏输出
-推挽式输出
-推挽式复用功能
-开漏复用功能
每个I/O端口位可以自由编程,然而I/O端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问这样,在读和更改访问之间产生IRQ时不会发生危险。
下图给出了一个I/O端口位的基本结构。
每一种MUC都有其控制I/O的方法。STM32最常用就是利用库函数控制输入输出。
控制流程:初始化I/O功能 ---> 对I/O进行 *** 作
初始化函数:
void IO_Init(void){ //LED灯的接口初始化
GPIO_InitTypeDef GPIO_InitStructure
//使能GPIOB时钟,因为我们要使用GPIOB上的管脚
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE)
//我们需要使用GPIOB的管脚,但是管脚位我们使用0号,所以总来说是PB0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0
//选择PB0管脚的功能
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP//选择IO接口工作方式为推挽输出
/*可取值
GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入,采集数字信号
GPIO_Mode_IPD 下拉输入,高电平有效
GPIO_Mode_IPU 上拉输入,低电平有效
GPIO_Mode_Out_PP 推挽输出,有推动能力的输出
GPIO_Mode_Out_OD 开漏输出,无推动能力
GPIO_Mode_AF_PP 复用推挽输出,复用功能时启用
GPIO_Mode_AF_OD 复用开漏输出,复用功能时启用*/
//配置IO口的输出速度,如果是输入功能,这个就不用设置了
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz //可设置IO接口速度(2/10/50MHz)
//将上面设置写入到GPIOB设置寄存器
GPIO_Init(GPIOB, &GPIO_InitStructure)
}
输入与输出函数:
STM32提供了好几种输出函数
输入主要是读引脚电平,也提供了几个函数
这些函数需要题主在学习过程中掌握,这里我只是给以一个控制流程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)