GPIO基本原理与寄存器配置
基础信息
STM32F103ZET6,一共有7组IO口,每组IO口有16个IO
USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。
FT: 可容忍5V(给IO口5V电压也可识别为高电平)
GPIO工作方式
4种输入模式:
- 输入浮空
- VDD\VSS开关均断开
- 施密特触发器打开
- CPU读输入数据寄存器数据
- 输入上拉
- VDD开关闭合,接入30-50K的上拉电阻
- 施密特触发器打开
- CPU读输入数据寄存器数据
- 输入下拉
- VSS开关闭合,接入30-50K的下拉电阻
- 施密特触发器打开
- CPU读输入数据寄存器数据
- 模拟输入
- VDD\VSS开关均断开
- AD转换(模拟0-3.3V量转为数字量)
- 施密特触发器截止
4种输出模式:
- 开漏输出(只可以输出强低电平,高电平得靠外部电阻拉高。)
- 由CPU写入数据到"位设置/清除寄存器",映射到"输出数据寄存器"
- 若"输出数据寄存器"输出1
- N-MOS关闭(截止),此时IO口电平不由1决定
- IO口状态由外部上下拉决定(浮空状态)
- 输出的电平可以有4-5-6-7路径读取
- 若"输出数据寄存器"输出0
- N-MOS开启
- IO口状态被VSS拉低输出低电平
- 输出的低电平可以有4-5-6-7路径读取
- 开漏复用功能
- 原理与开漏输出相似
- 由复用功能外设输出决定
- 若外设输出1
- N-MOS关闭(截止),此时IO口电平不由1决定
- IO口状态由外部上下拉决定(浮空状态)
- 输出的电平可以有4-5-6-7路径读取
- 若外设输出0
- N-MOS开启
- IO口状态被VSS拉低输出低电平
- 输出的低电平可以有4-5-6-7路径读取
- 推挽式输出(可以输出强高低电平,连接数字器件)
- 由CPU写入数据到"位设置/清除寄存器",映射到"输出数据寄存器"
- 若"输出数据寄存器"输出1
- P-MOS导通,N-MOS关闭(截止)
- IO口输出1
- 输出的电平可以有4-5-6-7路径读取
- 若"输出数据寄存器"输出0
- P-MOS截止,N-MOS导通
- IO口输出0
- 输出的低电平可以有4-5-6-7路径读取
- 推挽式复用功能
- 由复用功能外设输出决定
- 若"输出数据寄存器"输出1
- P-MOS导通,N-MOS关闭(截止)
- IO口输出1
- 输出的电平可以有4-5-6-7路径读取
- 若"输出数据寄存器"输出0
- P-MOS截止,N-MOS导通
- IO口输出0
- 输出的低电平可以有4-5-6-7路径读取
参考资料网址
http://www.openedv.com/posts/list/21980.htm
3种最大翻转速度:
- 2MHZ
- 10MHz
- 50MHz
GPIO相关配置寄存器(共7 × \times × 7=49个寄存器)
一组GPIO有16个IO口
每组GPIO端口的寄存器包括:
-
两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH)
控制每个IO口要4位寄存器,所以要两个32位寄存器
四位分为两部分MODE、CNF- GPIOx_CRL:端口配置低寄存器(配置低位:PA0-PA7)
- GPIOx_CRH:端口配置高寄存器(配置高位:PA8-PA15)
- GPIOx_CRL:端口配置低寄存器(配置低位:PA0-PA7)
-
两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR)
-
GPIOx_IDR:端口输入寄存器
每组GPIO有16个IO口,只需要IDR中的16位,低十六位记录高低电平
-
GPIOx_ODR:端口输出寄存器
每组GPIO有16个IO口,只需要ODR中的16位
输入模式下,判断上拉(1)下拉(0)
-
-
一个32位置位/ 复位寄存器(GPIOx_BSRR)
低位:只设置为1的IO口,其他IO口不影响
-
一个16位复位寄存器(GPIOx_BRR)
与BSRR的关系高位一样
-
一个32位锁定寄存器(GPIOx_LCKR)
STM32引脚说明
端口复用功能
复用: 就是一些端口不仅仅可以做为通用IO口,还可以复用为一些外设引脚,比如PA9,PA10可以复用为STM32的串口1引脚。
作用: 最大限度的利用端口资源
端口重映射功能
重映射: 把某些功能引脚映射到其他引脚。比如串口1默认引脚是PA9,PA10可以通过配置重映射映射到PB6,PB7。