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. 自学Zabbix之路15.3 Zabbix数据库表结构简单解析-Triggers表、Applications表、 Mapplings表

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix之路15.3 Zabbix数据库表结构简单解析-Triggers表.Applica ...

  2. Nginx入门篇

    Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 ...

  3. ps 中取消网格线的吸附功能,其实是对齐功能

    ps 中取消网格线的吸附功能,其实是对齐功能

  4. Omnibus test

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  5. 51job_selenium测试

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  6. nGrinder TestRunnerInsertMysqlMore.groovy

    s C:\Users\Lindows\workspace\GroovyTest\src\com\iteye\lindows\mysql\TestRunnerInsertMysqlMore.groovy ...

  7. Hive记录-impala常用命令

    1.impala是什么 Impala是Cloudera公司主导开发的新型查询系统,它提供SQL语义,能查询存储在Hadoop的HDFS和HBase中的PB级大数据.已有的Hive系统虽然也提供了SQL ...

  8. golang结构体

    声明结构体 定义结构体使用struct关键字.在结构体内部定义它们的成员变量和类型.如果成员变量的类型相同还可以把它们写到同一行. struct里面可以包含多个字段(属性) struct类型可以定义方 ...

  9. UVALive - 7639 G - Extreme XOR Sum(思维)

    题目链接 题意 给出一个序列,相邻两两异或,生成一个新序列,再相邻两两异或,直到只剩下一个元素,问最后结果为多少.m个查询,每次都有一个待查询区间. 分析 既然有多组查询,n只是1e4,那么可以考虑预 ...

  10. 转--python 中写单例

    原文地址 原文地址2 Python中的单例模式的几种实现方式的及优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法 ...