GPIO的工作模式
1、4种输入模式
(1)GPIO_Mode_IN_FLOATING 浮空输入
(2)GPIO_Mode_IPU 上拉输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_AIN 模拟输入
2、4种输出模式
(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)
(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)
(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)
3、4种最大输出速度
(1)2MHZ (低速)
(2)25MHZ (中速)
(3)50MHZ (快速)
(4)100MHZ (高速)
寄存器
GPIO 端口模式寄存器
GPIO 端口输出类型寄存器
在cubeMX生成的代码中修改引脚的模式,只修改输入输出模式即可。
配置通用输入模式
GPIOA->MODER &=0XFFFFFFF3;//清零寄存器中PA1的值,即配置PA1为输入模式
//也可以这也写:
// GPIOA->MODER &=~(0X3<<2*1);//配置PA1输入模式
配置推挽输出模式
GPIOA->MODER &=0XFFFFFFF3 ;//先清零寄存器中PA1的值
GPIOA->MODER |=0X1<<2 ;//配置PA1通用输出模式
GPIOA->OTYPER &=0XFFFD;//配置PA1推挽输出模式
//也可以这也写:
// GPIOA->MODER &=~(0X3<<2*1);//先清零寄存器中PA1的值
// GPIOA->MODER |=(0X1<<2*1) ;//配置PA1通用输出模式
// GPIOA->OTYPER &=~(0x1<<1);//配置PA1推挽输出模式
配置GPIO输出速度
GPIOA->OSPEEDR &=0XFFFFFFF3;//先清零寄存器中PA1的值
GPIOA->OSPEEDR |=0X1<<2 ;//配置PA1速度25MHz
最后封装一下即可
#define MPU_SDA_IN() GPIOA->MODER &=0XFFFFFFF3;//输入模式
void MPU_SDA_OUT(void) {
GPIOA->MODER &=0XFFFFFFF3 ;//先清零寄存器中PA1的值
GPIOA->MODER |=0X1<<2 ;//配置PA1通用输出模式
GPIOA->OTYPER &=0XFFFD;//配置PA1推挽输出模式
GPIOA->OSPEEDR &=0XFFFFFFF3;//先清零寄存器中PA1的值
GPIOA->OSPEEDR |=0X1<<2 ;//配置PA1速度25MHz
}
另外操作寄存器常用的C语言语法:
//从第0位开始 共0-31位
GPIOA->MODER &=~(0X1<<2);//将第2位清零
GPIOA->MODER &=0XFFFFFFF3;//将第2、3位清零
GPIOA->MODER &=~(0X3<<2);//将第2、3位清零
GPIOA->MODER &=~(0X3<<2*4);//将第四组的位清零,即第8、9位清零
GPIOA->MODER |=0X1<<2;//将第2位置1
GPIOA->MODER |=0XC;//将第2、3位置1
GPIOA->MODER |=0X3<<2;//将第2、3位置1
GPIOA->MODER |=0X3<<2*4;//将第四组的位置1,即第8、9位置1
16进制的转换可以借助WIN10自带计算机(程序员模式):