最近学习完了STM32系列单片机,所以准备对所学习的知识进行总结,以便以后查阅。
文章的单片机以
MCU:STM32F103C8T6
标准准库:V3.5.0
开发环境:Keil5
STM32-GPIO
一、GPIO模式
GPIO共有八种模式,输入和输出分别四种。
GPIO输入模式 | 模式 |
---|---|
GPIO_Mode_AIN | 模拟输入 |
GPIO_Mode_IN_FLOATING | 浮空输入 |
GPIO_Mode_IPD | 下拉输入 |
GPIO_Mode_IPU | 上拉输入 |
GPIO输出模式 | 模式 |
GPIO_Mode_Out_OD | 开漏输出 |
GPIO_Mode_Out_PP | 推挽输出 |
GPIO_Mode_AF_OD | 复用开漏输出 |
GPIO_Mode_AF_PP | 复用推挽输出 |
1.1 GPIO输入模式
- 浮空输入(GPIO_Mode_IN_FLOATING):空闲时,IO状态不确定,由外部决定。
- 上拉输入(GPIO_Mode_IPU):空闲时,IO高电平
- 下拉输入(GPIO_Mode_IPD):空闲时,IO低电平
- 模拟输入(GPIO_Mode_AIN):专门用于ADC与DAC的输入与输出
1.2 GPIO输出模式
- 开漏输出(GPIO_Mode_Out_OD):不能输出高电平,必须有外部或(内部)上拉才能输出高电平
- 复用开漏输出(GPIO_Mode_AF_OD):与普通的开漏输出一样,输出由单片机外设控制
- 推挽输出(GPIO_Mode_Out_PP):可以输出高低电平,驱动能力强
- 复用推挽输出(GPIO_Mode_AF_PP):与普通的推挽输出一样,输出由单片机外设控制
Note:
- 在GPIO配置为输出模式时,依然可以读取外部的输入信号
- F1在输出模式。禁止使用内部上下拉电阻,F4/F7/H7输出模式,可以使用内部上下拉电阻。
二、初始化GPIO
在STM32中使用大部分外设都需要进行初始化
- 使能GPIOA时钟
- 引脚模式->引脚速度->选择引脚
void GPIO_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//1. 初始化时钟
GPIO_InitTypeDef GPIO_InitStructure;//GPIO结构体
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_5; // A3 A5
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 引脚速度
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化
}
三、GPIO读与写
3.1 写GPIO
GPIO_SetBits(GPIOA,GPIO_Pin_0);//输出高电平
GPIO_ResetBits(GPIOA,GPIO_Pin_0);//输出电平
GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);//输出高电平
3.2 读GPIO
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_11);
GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_11);