STM32单片机 day02
5. GPIO
5.1. GPIO基本概念
通用输入输出接口,允许系统与外部设备进行交互。
- 输入模式:GPIO作为输入时,可以接收来自传感器、开关或其他外部设备的信号。这些信号被传递给嵌入式系统的处理器,以便系统可以根据这些信号做出相应的决策或执行特定的操作。
- 输出模式:GPIO作为输出时,可以向外部设备发送数字信号。例如,控制LED的亮灭、驱动电机运转等。通过改变输出信号的状态,嵌入式系统可以与外部设备进行交互。
5.2. 实际应用
INPUT——输入:数据采集 举例:传感器数据,设备电平状态
OUTPUT——输出:设备控制 举例:控制LED,显示屏,继电器
5.3. GPIO结构框图
VCC、VSS、VDD:
- VCC:接入电路的电压
- VDD:元器件内部的工作电压
- VSS:公共接地端的电压
保护二极管: 保证IO端口稳定在工作电压范围内
- 高于工作电压,VDD分走一部分
- 低于工作电压,VSS补足一部分
上拉/下拉电阻: IO口在没有接入电压的时候,存在一个默认状态
- 上拉电阻:接高电平,IO口默认高电平
- 下拉电阻:接低电平,IO口默认低电平
施密特触发器: 电压比较器,模拟量信号转化为数字量信号
5.3. 施密特触发器
- 将模拟量信号整形称为数字量信号
- 回差带:0.3~0.7
- 处理后得到高低电平,存入输入数据寄存器
5.4. 工作模式
- 四种输入模式
浮空输入
输入电平完全取决于外部电路
没有外部电路接入时,电平不稳定
上拉输入
保证默认输入高电平
有输入信号时,输入什么就读什么
下拉输入
保证默认输入低电平
有输入信号时,输入什么就读什么
模拟输入
不通过施密德触发器,片上外设(ADC)获取电平模拟量 - 四种输出模式
推挽输出
CPU写1,输出控制取反变成0,NMOS激活,输出高电平
CPU写0,输出控制取反变成1,PMOS激活,输出低电平
开漏输出 PMOS管关闭,NMOS管打开或关闭
1. 改变输出电压
CPU写0,NMOS管打开,外接上拉电阻,线路导通,对外输出低电平
CPU写1,NMOS管关闭,对外呈高阻态,外接的上拉电阻对外输出高电平
2. 线与功能:只要有一个NMOS管打开,对外就输出低电平
推挽输出和开漏输出的区别
推挽输出 | 开漏输出 | |
---|---|---|
高电平驱动能力 | 强 | 由外接上拉电阻和VCC决定 |
低电平驱动能力 | 强 | 强 |
电平跳变速度 | 块 | 由外部上拉电阻决定,电阻越小,反应越快,功耗越大 |
线与功能 | 不支持 | 支持 |
电平转换 | 不支持 | 支持 |
6. 点亮一盏灯
查找灯的编号
从开发板/系统板上找到灯的编号:D1
查看原理图
- 从原理图上找到D1的电路图,分析引脚的操作
PC13需要一个高电平 - 从原理图上查看单片机引脚编号
P:表示引脚是GPIO
C:指这是C组的引脚
13:表示引脚为该组的第13号引脚,标号从0开始
去手册上查找寄存器
- 需要先确定相应功能在哪一条总线上
- 找到RCC的配置寄存器,将时钟进行使能
- 如果需要使用GPIO功能则需要找到GPIO的相应基地址
- 模式寄存器
- 输出类型寄存器
- 输出数据寄存器
编程实现
- CPU控制硬件
CPU不能直接控制硬件
- 寄存器分析
1. 启动时钟:0X56020C8C 将位2置位
2. 配置工作模式:0X52020800 位26置位 位27复位
3. 配置输出类型:0X52020804 位13复位
4. 配置输出数据:0X52020814 位13置位 - MX配置
- 代码编写
*(unsigned int *)0x56020c8c |= 1<<2; //RCC使能,启用GPIOC的时钟
*(unsigned int *)0x52020800 |= 1<<26;
*(unsigned int *)0x52020800 &= ~(1<<27); //将PC13设置为输出
*(unsigned int *)0x52020804 &= ~(1<<13); //将PC13配置为推挽
*(unsigned int *)0x52020814 |= 1<<13; //将PC13设置为高电平
- 法二:结构体代替地址
RCC->AHB2ENR1 |= 1<<2; //RCC使能,启用GPIOC的时钟
GPIOC->MODER |= 1<<26;
GPIOC->MODER &= ~(1<<27); //将PC13设置为输出
GPIOC->OTYPER &= ~(1<<13); //将PC13配置为推挽
GPIOC->ODR |=1<<13; //将PC13设置为高电平
- 法三:配置MX
通过MX直接修改单片机引脚配置,回到Keil5更新程序,编译无误后下载进系统板