- STM32外设基本知识
GPIO:GPIO(英语:General-purpose input/output),通用型之输入输出的简称
- STM32F407ZET6引脚分组
STM32F407ZET6(144引脚)
- 一共有7组IO口 (PA、PB、PC、PD、PE、PF、PG)
- 每组IO口有16个IO引脚
- 一共16X7=112个IO引脚
外加2个PH0和PH1(用于连接晶振)
一共114个IO口引脚
- 引脚寄存器
每组通用 I/O 端口包括(共十个,下面x代表:A B C D E F G 组):
4 个 32 位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR 和 GPIOx_PUPDR)。
2 个 32 位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)。
1 个 32 位置位/复位寄存器 (GPIOx_BSRR)、
1 个 32 位锁定寄存器(GPIOx_LCKR)
2 个 32 位复用功能选择寄存器(GPIOx_AFRH 和 GPIOx_AFRL)。
寄存器实际物理地址 = 基地址 + 偏移地址
- GPIO工作方式
GPIO工作方式
4种输入模式(数据从引脚到芯片内部)
浮空输入(无上下拉电阻)
上拉输入
下拉输入
模拟输入(模拟信号)
4种输出模式
开漏输出(带上拉或者下拉)
开漏复用功能(带上拉或者下拉)
推挽式输出(带上拉或者下拉)
推挽是复用功能(带上拉或者下拉)
4种最大输出速度
2MHZ
25MHZ
50MHZ
100MHZ
开漏:引脚只能输出0,如果想输出1,那外部要接上拉电阻。
推挽:引脚可输出0 或者 输出1(常用)
上拉电阻:将一个不确定的信号,通过一个电阻与电源VCC相连,固定在高电平。
作用:上拉是对器件注入电流;灌电流;当一个接有上拉电阻的IO端口设置为输入状态时,它的常态为高电平。
下拉电阻:将一个不确定的信号,通过一个电阻与地GND相连,固定在低电平。
作用:下拉是从器件输出电流;拉电流。当一个接有下拉电阻的IO端口设置为输入状态时,它的常态为低电平。
上拉电阻和下拉电阻二者共同的作用是:避免电压的“悬浮”,造成电路的不稳定。
- LED开发
1.理解LED电路原理
LE0连接在PF9。
PF9输出0(低电平),灯亮
PF9输出1(高电平),灯灭
2.打开GPIOF组时钟,(STM32所有外设时钟都是关闭的)
//使能GPIO F组时钟
RCC_AHB1ENR |= (0x01<<5);
3、设置GPIO F9引脚模式、上/下拉、输出类型、速度。
- GPIOx_MODER
//PF9设置为通用输出
GPIOF_MODER &= ~(0x01<<19); //19位置0
GPIOF_MODER |= (0x01<<18); //18位置1
- GPIOx_PUPDR
//PF9设置为上拉
GPIOF_PUPDR &= ~(0x01<<19); //19位置0
GPIOF_PUPDR |= (0x01<<18); //18位置1
- GPIOx_OTYPER
//PF9设置为输出推挽
GPIOF_OTYPER &= ~(0x01<<9); //9位置0
- GPIOx_OSPEEDR
//PF9设置速度为50MHZ
GPIOF_OSPEEDR |= (0x01<<19); //19位置1
GPIOF_OSPEEDR &= ~(0x01<<18); //18位置0
4、通过BSRR寄存器设置ODR输出0或者输出1
//BSRR 第9位置1 ODR输出1,LED0灯灭
GPIOF_BSRR |= (0x01<<9); //9位置1
//BSRR 第25位置1 ODR输出0,LED0灯亮
GPIOF_BSRR |= (0x01<<25); //25位置1