GPIO简介
GPIO的英文名称是General Purpose Input Output,顾名思意,就是通用输入输出口,可以用来输入输出高低电平进而控制各种连接在GPIO上的模块等等。STM32的GPIO就是51单片机的P11、P12等等引脚,不过STM32的GPIO更加强大,具有多种模式,为了控制功耗,每一个GPIO都有单独的时钟开关,每使用到一个GPIO都要对其时钟使能,而且STM32的GPIO的输入输出必须单独配置。
GPIO的模式与各种外设GPIO模式的设置
GPIO有八种输入输出模式,对于输出模式还能设置输出的速度,每一个外设对应GPIO口的模式都不全相同,例如使用I2C_SCL的时候GPIO口要设置成 开漏复用输出,SPI_SCK主模式GPIO口要设置成 推挽复用输出等等,记住是不可能的,不过官方的参考手册就已经给出了每一个外设的GPIO的配置情况,我们需要用到某个外设GPIO口的时候不知道怎么配置模式可以到《STM32中文参考手册》8.1.11小节查看
GPIO的常用寄存器
首先对于每一个寄存器必须以字(32位)的方式操作这些外设寄存器
-
端口配置低寄存器(GPIOx_CRL) (x=A…E)
配置GPIO 0~7位的模式
-
端口配置高寄存器(GPIOx_CRH) (x=A…E)
配置GPIO 8~16位的模式
-
端口输入数据寄存器(GPIOx_IDR) (x=A…E)
有16个位 只读并只能以字(16位)的形式读出
对于每个GPIO16个引脚的状态,是高电平就是1,低电平就是0
-
端口输出数据寄存器(GPIOx_ODR) (x=A…E)
配置GPIO输出的电平
-
端口位设置/清除寄存器(GPIOx_BSRR) (x=A…E)
前16位写1就会对对应的ODR寄存器的位写1
后16位写1就会对对应的ODR寄存器的位写0
一般只用BSRR寄存器来写1,也就是只用前16位,后面16位一般不用