1.前言

每个GPIO端口有如下几个寄存器进行操作:

  • 两个32位配置寄存器:GPIOx_CRL, GPIOx_CRH
  • 两个32位数据寄存器:GPIOx_IDR, GPIOx_ODR
  • 一个32位set/reset寄存器:GPOx_BSRR
  • 一个16位reset寄存器:GPIOx_BRR
  • 一个32位锁定寄存器:GPIOx_LCKR

注:GPIO_BRR和GPIO_BSRR支持读写的原子访问

每组GPIO的 port可以配置成如下的IO方式:

2.GPIO基本结构

图 标准GPIO位的基本结构

图 port bit配置表

图 输出模式bit

3.GPIO功能描述

3.1 通用目的IO(GPIO)

  • reset过程中或刚reset后

引脚的可选功能是无效的,端口被配置成Input Floating Mode(CNFx[1:0]=01b, MODEx[1:0]=00b).

RESET后JTAG pin:PA15: JTDI in PU  、 PA14: JTCK in PD  、  PA13: JTMS in PU   、 PB4: NJTRST in PU

  • 配置为输出模式

写到GPIOx_ODR中的值被输出到port引脚,可能使用的驱动模式:push-pull  or open-drain

  • 配置为输入模式

GPIOx_IDR在每个APB2时钟周期会捕获IO引脚上的数据

注:1.每个GPIO PIN都有一个弱上拉和一个弱下拉,在配置为输入模式时可以决定是否使能

  • 原子的bit set/reset

在操作GPIO_ODR寄存器的时候没有必要关中断,通过写入GPIO_BRR或GPIO_BSRR来set或reset GPIO的相关port bit

  • 外部中断/唤醒线

所有的gpio端口都具有中断/唤醒功能,要使用外部中断线,需要配置为输入功能

  • IO配置锁定功能

当配置锁定功能后,GPIO的port bit将不能修改,除非reset

  • GPIO寄存器说明

GPIO_CRL:设置GPIO低8个port bit的输入/输出模式、设置driver方式;

GPIO_CRH:设置GPIO高8个port bit的输入/输出模式、设置driver方式;

GPIO_IDR:显示每个GPIO port的输入值

GPIO_ODR:设置每个GPIO port的输出值

GPIO_BSRR:标记输出值寄存器的哪些位需要set/reset

GPIO_BRR:标记输出值寄存器的哪些位需要REset

GPIO_LCKR:设定GPIO的哪些port bit配置被锁定

3.2 可选功能(AF)

  • 可选功能输入

port必须配置为输入模式(input floating, input pull-up, intpu pull-down),且输入pin必须由外部驱动

  • 可选功能输出

port必须配置为输出模式(push-pull or open-drain)

  • 可选功能双向

在输出时,port必须配置为输出模式(push-pull or open-drain);在输入时port必须配成输入模式(input floating)

注:1. 配置一个 port为可选功能输出,则会断开输出寄存器,并与外设的某个输出信号引脚链接,如图 标准GPIO位的基本结构

2. 如果软件将GPIO配置为可选功能输出,但是外设没有使能,这输出状态不确定

  • 软件重现映射I/O可选功能

通过配置AFIO寄存器,重映射一些功能到其它引脚,此时这些可选功能将与原有GPIO断绝关联

  • 举例:配置为UART功能

  • AFIO寄存器说明

AFIO_EVCR:如果置位,cotex事件将发送到某个端口的pin

AFIO_MAPR/AFIO_MAPR2:对可选功能进行重新映射

AFIO_EXTICR1/AFIO_EXTICR2/AFIO_EXTICR3/AFIO_EXTICR4:设置各个GPIO的中断线

4. 参考文献

[1] STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and

STM32F107xx advanced ARM®-based 32-bit MCUs

STM32F103X datasheet学习笔记---GPIOs and AFIOs的更多相关文章

  1. STM32F103X datasheet学习笔记---RCC(reset and clock control)

    1.前言 本文主要记录stm32 关于reset 和 clock部分 datasheet的内容. 2.reset 有三种类型的reset:system reset, power reset, back ...

  2. STM32F103X datasheet学习笔记---Flexible static memory controller (FSMC)

    1.前言 FSMC模块能够与同步或异步存储器和16位PC存储器卡接口,它的主要作用是: 将AHB传输信号转换到适当的外部设备协议 满足访问外部设备的时序要求 所有的外部存储器共享控制器输出的地址.数据 ...

  3. STM32F103X datasheet学习笔记---Interrupts and events

    1.前言 本章主要介绍STM32中断和事件相关的内容 2.NVIC NVIC管理着包括内核异常等中断 主要特性 68个外部中断源(不包含16个内部中断线) 可编程优先级为16级 低延迟异常和中断处理 ...

  4. STM32F103X datasheet学习笔记---DMA

    1.前言 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输. 无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作. 两个DMA控制器 ...

  5. STM32F103X datasheet学习笔记---USART

    1.前言 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择. 它支持同步 ...

  6. ARMV8 datasheet学习笔记5:异常模型

    1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...

  7. ARMV8 datasheet学习笔记3:AArch64应用级体系结构

    1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...

  8. k64 datasheet学习笔记45---10/100-Mbps Ethernet MAC(ENET)之功能描述

    1.前言 本文是对K64 datasheet 之ENET部分的功能描述,将对每个部分进行详细说明 2.Ethernet MAC frame formats MAC帧组成格式 (1)7字节前导码:如按最 ...

  9. k64 datasheet学习笔记3---Chip Configuration之Analog

    1.前言 本文主要讲述K64芯片配置,关于模拟部分的内容,主要包括:ADC, CMP, DAC, VREF 2.16bit SAR ADC 从上图可以看出ADC主要挂在外设总线0上,由于ADC的输入引 ...

随机推荐

  1. ANDROID 实现 再按一次返回键退出程序 代码片段

    //1.声明变量 // 退出时间 private long currentBackPressedTime = 0; // 退出间隔 private static final int BACK_PRES ...

  2. 【转】Linux常用命令

    日常操作命令 查看当前所在的工作目录的全路径 pwd 12 [root@localhost ~]# pwd/root 查看当前系统的时间 date 12345678 [root@localhost ~ ...

  3. 洛谷 P3102 [USACO14FEB]秘密代码Secret Code 解题报告

    P3102 [USACO14FEB]秘密代码Secret Code 题目描述 Farmer John has secret message that he wants to hide from his ...

  4. bzoj1597/luogu2900 土地购买 (斜率优化dp)

    首先按x从小到大排序,那么可得: f[i]=min{f[j]+x[i]*maxy[j+1..i]} 然而这样是$O(n^2)$的而且无法做优化. 然后我们考虑:如果对于某一点,存在另一点的x和y都比它 ...

  5. happens-before

    happens-before是JMM最核心的概念.对应Java程序员来说,理解happens-before是理解JMM的关键. JMM的设计 首先,让我们来看JMM的设计意图.从JMM设计者的角度,在 ...

  6. Elasticsearch利用cat api快速查看集群状态、内存、磁盘使用情况

    使用场景 当Elasticsearch集群中有节点挂掉,我们可以去查看集群的日志信息查找错误,不过在查找错误日志之前,我们可以通过elasticsearch的cat api简单判断下各个节点的状态,包 ...

  7. EOJ2018.10 月赛

    EOJ2018.10 月赛 题目一览表(Green color indicate understand and Accept) 来源 考察知识点 完成时间 A oxx 的小姐姐们 EOJ 数学+思维 ...

  8. String转换为Map

    Map<String,Integer> rulsMap = new Gson().fromJson(cachedobj.toString(),new TypeToken<Map< ...

  9. python---网络之邮件发送

    在发送邮件之前需要先设置邮件开启了SMTP等功能,对于163还需要获取授权码 这里设置保存修改 这里获取授权码 完整封装发送邮件类 import smtplib from email.mime.tex ...

  10. HDU - 5419 Victor and Toys(组合计数)

    http://acm.hdu.edu.cn/showproblem.php?pid=5419 题意 n个物品,标号1-n,物品i有权值wi.现在有m个区间[l,r],从中任意选三个区间i,j,k,求物 ...