STM32F103ZET6

  • 一共有7组IO口(有FT的标识是可以识别5v的)
  • 每组IO口有16个IO
  • 一共16*7=112个IO

4种输入模式:
(1) GPIO_Mode_AIN 模拟输入
(2) GPIO_Mode_IN_FLOATING 浮空输入
(3) GPIO_Mode_IPD 下拉输入
(4) GPIO_Mode_IPU 上拉输入

4种输出模式:
(5) GPIO_Mode_Out_OD 开漏输出
(6) GPIO_Mode_Out_PP 推挽输出
(7) GPIO_Mode_AF_OD 复用开漏输出
(8) GPIO_Mode_AF_PP 复用推挽输出

四种输入模式:

1、一图记住上拉、下拉、浮空输入模式:

原理分析:图中箭头表示信号流动方向。从I/O引脚向左沿着箭头方向,首先遇到两个开关和电阻,与VDD相连的称为上拉电阻,与Vss相连的称为下拉电阻,再连接到施密特触发器(信号转换)把电压信号转化为0、1的数字信号,存储在输入数据寄存器(IDR)。然后通过设置配置寄存器(CRL、CRH)控制这两个开关,于是就可以得到GPIO的上拉输入、下拉输入模式和浮空输入模式,浮空就是既不接上拉也不接下拉。在上拉/下拉/浮空输入模式中,输出缓冲器被禁止(P-MOS和N-MOS),施密特触发器输入被激活,根据输入配置(上拉,下拉或浮动)的不同,弱上拉和下拉电阻被连接,读输入数据寄存器的值可得到I/O状态。

小结:

  1. 上拉输入:接入上拉电阻,与电源接通,所以默认状态下读到的GPIO引脚电平为高电平,即为1
  2. 下拉输入:接入下拉电阻,与地接通,所以默认状态下读到的GPIO引脚电平为低电平,即为0
  3. 浮空输入:既不接上拉也不接下拉,所以输入的是高电平就是高电平,低电平就是低电平
  4. 在输入模式下可以通过ODR寄存器相对应的位来确定具体是上拉还是下拉,0是下拉,1是上拉。

2、一张图记住模拟输入:

原理分析:图中箭头表示信号流动方向。可以看出模拟输入模式关闭了施密特触发器,也不接上、下拉电阻,经由另一线路把电压信号传送到片上外设模块。如传送给 ADC 模数转换模块,由ADC 采集电压信号。所以使用 ADC外设时,必须设置为模拟输入模式。在此模式中,输出缓冲器被禁止,禁止施密特触发输入,实现了每个模拟I/O引脚上的零消耗,施密特触发输出值被强制置为0,弱上拉和下拉电阻被禁止,读取输入数据寄存器时数值为0。

小结:模拟输入模式把图中的红色字体部分都禁止了。注意:GPIO在输入模式下是不需要设置端口的最大输出速度的。

四种输出模式:

1、一张图记住开漏和推挽输出模式:

原理分析:
开漏输出:图中箭头表示信号流动方向。如果往输出数据寄存器写入0,因为N-MOS是接地的,低电平信号会激活N-MOS,所以输出的IO口引脚为低电平。但是反过来是不成立的(另一个模式才可以),你肯定会想,如果写入1,P-MOS接电源,所以输出1,不是这样的。开漏输出模式P-MOS从不被激活,所以开漏模式只可以输出强低电平,高电平得靠外部电阻拉高,要得到高电平状态需要上拉电阻才行。

推挽输出:输出数据寄存器上的0激活N-MOS,I/O口输出低电平;而输出数据寄存器上的1将激活P-MOS,I/O口输出高电平。两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都比普通方式有很大提高。

小结:开漏就是推挽的二分之一。开漏模式只可以输出强低电平。

2、一张图记住开漏复用和推挽复用输出:

当I/O端口被配置为复用功能时,其他配置跟开漏和推挽一样的,只不过开漏和推挽是由CPU来写,而复用就是外设来写0和1。至于选择复用开漏输出还是复用推挽输出,是根据 GPIO 复用功能来选择的,如 GPIO 的引脚用作串口输出,则使用复用推挽输出模式;如用在I2C、SMBUS 等这些需要“线与”功能的复用场合,就使用复用开漏模式。

小结:复用是外设来写0和1。

GPIO相关寄存器配置

每一组IO口都有以下7个寄存器

 - GPIOx_CRL:端口配置低寄存器(32位)- GPIOx_CRH:端口配置高寄存器(32位)- GPIOx_IDR:端口输入寄存器(32位)- GPIOx_ODR:端口输出寄存器(32位)- GPIOx_BSRR:端口位设置/清除寄存器(32位)- GPIOx_BRR:端口位清除寄存器(16位)- GPIOx_LCKR:端口配置锁存寄存器(32位)不常用

1、CRL和CRH寄存器
这两个32位寄存器是选择输入输出模式的时候起作用的,每4个位控制一个IO口,一组IO口有16个,所以一共需要64位,CRL管理(0~7)的IO口,CRH管理(8 ~15)的IO口。相应的值在MDK中通过一个枚举类型定义,只需要选择对应得值即可。

typedef enum
{ GPIO_Mode_AIN = 0x0,GPIO_Mode_IN_FLOATING = 0x04,GPIO_Mode_IPD = 0x28,GPIO_Mode_IPU = 0x48,GPIO_Mode_Out_OD = 0x14,GPIO_Mode_Out_PP = 0x10,GPIO_Mode_AF_OD = 0x1C,GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

2、ODR和IDR寄存器

ODR寄存器只用到了前面的16位。作用是控制GPIOx(x=A ~ G)的输出,即设置某个IO口输出低电平还是高电平,只有在输出模式下有效。

在固件库中设置ODR寄存器来控制IO口的输出状态是通过这两个函数来实现的:
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//读取一组
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//读取几个uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//读取一组
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);//读取几个
两个函数功能类似,区别是,前面的函数用来一次读取一组I/O口所有I/O口输出状态
后面的函数用来一次读取一组I/O口中一个或者几个I/O口的输出状态。

IDR寄存器也只用到了前面的16位。该寄存器用于读取GPIOx的输入,读取的某个I/O电平,如果对应的位为0(IDRy=0),则说明该脚输入为低电平;如果是1(IDRy=1),则表示输入的是高电平。用于寄存器设置的相关库函数为:

前面的函数用来读取一组I/O口的一个或者几个I/O口输入电平,后面的函数用来一次读取一组I/O口中所有I/O口的输入电平。
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin);//读取一组
uint16_t GPIO_ReadInputData(GPIO_TypeDef*GPIOx);//读取几个
比如要读取GPIOF.3的输入电平,方法为:GPIO_ReadInputDataBit(GPIOF,GPIO_Pin_3)。

3、端口位 设置/清除寄存器(GPIOx_BSRR)

该寄存器用来置位或复位I/O口,它和ODR寄存器具有类似的作用,都可以用来设置GPIO端口的输出位是1还是0。如果同时设置了BSy和BRy的对应位,BSy位起作用。其中,对于低16位(0 ~ 15),在相应位ODRy写1,对应的I/O口会输出高电平,写0,则对I/O口没有任何影响。高16位(16~31)作用刚好相反,对相应的位ODRy写1会输出低电平,写0没有任何影响。即对于BSRR寄存器,写0对I/O口电平是没有任何影响的。要设置某个I/O口电平,只需要设置相关位为1即可。而ODR寄存器要设置某个I/O口电平,首先需要读出来ODR寄存器的值,然后对整个ODR寄存器重新赋值来达到设置某个或某些I/O口的目的,而BSRR寄存器,就不需先读,而是直接设置。BSRR 寄存器使用方法如下:

GPIOA->BSRR=1<1;//设置GPIOA.1为高电平
GPIOA->BSRR=1<(16+1);//设置GPIOA.1为低电平

操作BSRR寄存器来设置I/O电平的库函数为:

//设置一组I/0口中的一个或者多个I/0口为高电平.
void GPIO_SetBits(GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin);

4、端口位清除寄存器(GPIOx_BRR)

寄存器用来置位或复位I/O口,即设置GPIO端口输出低电平。对于低16位(0~15),在相应位ODRy写1,对应的I/O口会输出低电平,写0则对I/O口没有任何影响。BRR 寄存器使用方法如下:

GPIOA->BRR=0×0001;//设置GPIOA.0为低电平

操作BRR寄存器来设置I/O电平的库函数为:

//设置一组I/0口中的一个或者多个I/0口为低电平
void GPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_t GPIO_Pin);

小结:BSRR和BRR寄存器最终也是操作ODR寄存器,BRR的作用相当于BSRR的高16位,一般使用BSRR的低16位和BRR来设置电平,BSRR的高16位很少使用。

STM32 GPIO口的配置和应用相关推荐

  1. 番外篇:STM32之GPIO口速率配置究竟代表什么

    番外篇:STM32之GPIO口速率配置究竟代表什么 用过STM32的童鞋们都知道,STM32在GPIO配置时都需要选择一个GPIO速率,对于STM32F103系列芯片来说最快的配置应该是50Mhz左右 ...

  2. stm32 gpio口的工作模式

    一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止.高低电平由IC的电源决定. 推挽电路是两个参数相同的三极管或M ...

  3. STM32 gpio口模式介绍

    先了解一个前置概念 原文链接: https://zhuanlan.zhihu.com/p/41942876 推挽输出(Push-Pull Output) 开漏输出(Open Drain Output) ...

  4. 关于STM32 GPIO配置基础概括

    一.词汇表 1.介绍常用词的定义: 缩略词 包含定义 AMR 绝对最大额定值(ABSOLUTE MAXIMUM RATINGS 更多地人称为: ABS) GPIO 通用输入/输出 GP 通用 P 推挽 ...

  5. STM32 IO口的8中配置方式解读(推挽输出、开漏输出、复用开漏输出、复用推挽输出以及上拉输入、下拉输入、浮空输入、模拟)

    转自:http://blog.csdn.net/u010592722/article/details/45746079 STM32  IO口的8中配置方式: (1)GPIO_Mode_AIN 模拟输入 ...

  6. Silicon C8051F340之GPIO口配置与使用

    一.背景:很久前用过C8051,现在有相关需求需要重新使用C8051,然后发现一年前开发的相关经验都忘得基本上差不多了.连最基本的GPIO口配置还得重新来看手册,所以有此文,做个记录,以备下次快速开发 ...

  7. k60的GPIO口配置

    写一下自己在智能车比赛学习到的一些东西吧,有点零散,趁此机会进行梳理一下,内容不是很深. 在智能车中用到GPIO口的地方有按键引脚.拨码开关引脚.舵机.摄像头数据口.场信号口.PLCK信号口等,而电感 ...

  8. STM32:GPIO配置说明

     最近在看数据手册的时候,发现在Cortex-M3里,对于GPIO的配置种类有8种之多: (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3) ...

  9. LPC1768的P0.27,P0.28管脚作为GPIO口输出需要外接上拉电阻才能输出高电平

    实验证明LPC1768的P0.27管脚不能作为GPIO口输出,配置为高电平时总是输出为低电平,不知道为什么! GPIO 引脚 P0.29 和 P0.30 与 USB D+/-引脚共用,并且具有相同的方 ...

最新文章

  1. 金华杭州计算机学校录取分数线,2017年浙江金华各地中考录取分数线
  2. 关于Eclipse中的开源框架EMF(Eclipse Modeling Framework),第三部分
  3. 在线文字图标logo文章封面图生成工具
  4. CCIE安全Lab实战(2005)学习记录
  5. 从数学上推导伴随矩阵特征值
  6. 宁海元 mysql_每公斤约360元 宁海香榧可以品尝了
  7. 我用Python模拟了谷爱凌的凌空一跃
  8. @vue3 element-plus 按需引入,默认英文组件修改为中文
  9. SQL调优指南笔记9:Joins
  10. Android Selinux权限问题
  11. python输出给定字符串中字母a出现的次数_[Python] 输出a字符串出现频率最高的字母,用到了list中的排序和Iambda...
  12. 超详细使用vue-cli搭建SPA项目
  13. docker命令(一) —— docker logs 日志输出
  14. keyshot分辨率多少合适_KeyShot渲染设置技巧,教你KeyShotVR自定义设置
  15. Win11下安装PSReadLine终端自动补全
  16. 如何选择合适的自动化测试工具?
  17. Intelij idea实现简单的个人所得税EJB组件并用webservice服务封装以及常见的几个问题解决思路
  18. 机器人锤石下路组合_lol你遇见过下路机器人锤石骚组合吗?
  19. Linux下面查找数据的grep
  20. python XML文件读写解析

热门文章

  1. MX-A6032-MEIS 千兆 3电2光 矿用本安型双频 WiFi6 工业级无线AP 规格书
  2. Controlled Markov Processes and Viscosity Solutions (chapter 1)
  3. 2001年,中国加入WTO
  4. 学会这5个让人相见恨晚的PPT技巧,你也能快速做出高逼格的PPT!
  5. 旅行计划——老挝,柬埔寨
  6. 2022年全球及中国危险区域旋转编码器行业头部企业市场占有率及排名调研报告
  7. 单片机_第4章 单片机的C51语言
  8. 矿大计算机毕业论文,中国矿业大学本科生毕业设计(论文)撰写规范.docx
  9. 如何仅使用电话传输代码
  10. 重启计算机到安全模式,电脑开机后,自动重新启动,进入安全模式正常,在安全模式下用卡巴没? 爱问知识人...