9 GPIO:通用I/O口 AFIO:可供选择的I/O口

9.1 GPIO功能描述

每一个通用的I/O口都有:

两个32位的配置寄存器(配置寄存器低和配置寄存器高);

两个32位的数据寄存器(输入数据寄存器,输出数据寄存器);

一个32位的位设置/复位寄存器;

一个16位的复位寄存器和1个32位锁定寄存器。

每个I/O口可以被软件配置为一下几种模式:

  • 浮点输入
  • 上拉输入
  • 下拉输入
  • 模拟
  • 开漏输出
  • 推挽输出
  • 推挽复用
  • 开漏复用

每个端口位可自由编程,但是端口寄存器必须以32位进行访问(不允许使用32位或8位进行访问)。

位设置复位寄存器和位复位寄存器的作用是允许对任何的GPIO寄存器进行原子读或修改。

这样的话,在读取和修改进入之间就不会有IRQ的风险。

上图是标准的I/O口的基本结构

该图中有三个基本的模块:输入驱动;输出驱动;寄存器。

在输入中改变两个开关决定是上拉还是下拉,不经过TTL施密特触发器就是模拟输入信号,

经过TTL施密特触发器就是复用功能输入,这些输入量可以流进片内外设。

通过输入数据寄存器可以读取输入的数据。

在输出驱动中,改变P-MOS和N-MOS决定是开漏还是推挽,输入信号的源头也是来自于片内外设。

通过位设置/复位寄存器和数据输出寄存器可以控制输出数据。

9.1.1 通用的I/O口

9.1.2 原子位置位或复位

9.1.3 外部中断唤醒

9.1.4 可以复用的功能

9.1.5 I/O复用功能的软件重新映射

9.1.6 GPIO锁定机制

9.1.7 输入配置

9.1.8 输出配置

9.1.9 复用功能配置

9.1.10 模拟配置

9.1.11 设备外设的GPIO配置

9.2 GPIO寄存器

9.2.1 端口配置寄存器低(GPIOx_CRL)(x=A..G)

9.2.2 端口配置寄存器高(GPIOx_CRH)(x=A..G)

9.2.3 端口输入数据寄存器(GPIOx_IDR)(x=A..G)

9.2.4 端口输出数据寄存器(GPIOx_ODR)(x=A..G)

9.2.5 端口位设置/复位寄存器(GPIOx_BSRR)(x = A..G)

9.2.6 端口位复位寄存器 (GPIOx_BRR)(x=A..G)

9.2.7 端口配置锁定寄存器(GPIOx_LCKP)(x=A..G)

9.3 可选功能I/O口以及调试配置

9.3.1 外部低速引脚

9.3.2 外部高速引脚

9.3.3 CAN1复用功能映射

9.3.4 CAN2复用功能映射

9.3.5 JTAG/SWD复用功能映射

9.3.6 ADC复用功能映射

9.3.7 Timer复用功能映射

9.3.8 USART复用功能映射

9.3.9 I2C1复用功能映射

9.3.10 SPI1复用功能映射

9.3.11 SPI3/I2S3复用功能映射

9.3.12 以太网复用功能映射

9.4 AFIO寄存器

9.4.1 事件控制寄存器(AFIO_EVCR)

9.4.2 AF重新映射和调试I/O配置寄存器(AFIO_MAPR)

9.4.3 外围中断配置寄存器1(AFIO_EXTICR1)

9.4.4 外围中断配置寄存器2(AFIO_EXTICR2)

9.4.5 外围中断配置寄存器3(AFIO_EXTICR3)

9.4.6 外围中断配置寄存器4(AFIO_EXTICR4)

9.4.7 AF重新映射和调试I/O配置寄存器2(AFIO_MAPR2)

9.5 GPIO和AFIO的寄存器图

STM32F103之GPIO学习记录的更多相关文章

  1. STM32F103之定时器学习记录

    /==============翻译STM32F103开发手册定时器部分========================/ 14 高级控制计时器(TIM1和TIM8) 14.1 TIM1和TIM8介绍 ...

  2. STM32F103之DMA学习记录

    /================翻译STM32F103开发手册DMA章节===========================/ 13 DMA(Direct memory access) 13.1 ...

  3. STM32F103之ADC学习记录

    1.问题 1)10位ADC的误差是多少? 首先要分清分辨率与精度的区别. 10cm的尺子,有100个等分刻度,则该尺子的分辨率为1mm. 但不能说这把尺子的精度是1mm. 在冬天,尺子会热胀冷缩,依然 ...

  4. STM32F103之I2C学习记录

    26.3.1  模式选择 该外设可以在以下四种模式之一 1)从机发送模式 2)从机接收模式 3)主机发送模式 4)主机接收模式 IIC协议时序 MSB:Most Significant Bit(最高有 ...

  5. STM32F103之USART学习记录

    1.USART的主要特性 1)名称:串行异步通信接口 2)全双工.异步通信 3)发送和接收速率最高可达4.5MBits/s 4)可编程数据长度8或9bits 5)可配置的停止位:支持1或2位停止位 6 ...

  6. Quartz 学习记录1

    原因 公司有一些批量定时任务可能需要在夜间执行,用的是quartz和spring batch两个框架.quartz是个定时任务框架,spring batch是个批处理框架. 虽然我自己的小玩意儿平时不 ...

  7. Java 静态内部类与非静态内部类 学习记录.

    目的 为什么会有这篇文章呢,是因为我在学习各种框架的时候发现很多框架都用到了这些内部类的小技巧,虽然我平时写代码的时候基本不用,但是看别人代码的话至少要了解基本知识吧,另外到底内部类应该应用在哪些场合 ...

  8. Apache Shiro 学习记录4

    今天看了教程的第三章...是关于授权的......和以前一样.....自己也研究了下....我觉得看那篇教程怎么说呢.....总体上是为数不多的精品教程了吧....但是有些地方确实是讲的太少了.... ...

  9. UWP学习记录12-应用到应用的通信

    UWP学习记录12-应用到应用的通信 1.应用间通信 “共享”合约是用户可以在应用之间快速交换数据的一种方式. 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参 ...

随机推荐

  1. EntityFramework之原始查询及性能优化

    之前做海信项目,数据量自交大,为了提高查询效率用的 https://www.cnblogs.com/CreateMyself/p/4746258.html

  2. 题解【洛谷P1618】 三连击(升级版)

    设三个数分别为n1.n2.n3,因为三个数的比为A:B:C,取一份量i,使得A·i=x,B·i=y,C·i=z(·是*的意思). 所以我们的代码只需要枚举i,并以此判断n1.n2.n3是否为三位数且包 ...

  3. 怎么编写API和或者自己不属于知识小案例demo程序

    再使用一个函数,进行测试的调用,然后进行调用这样就不需要再为makefile什么,还有就是改什么鬼东西烦恼了. 然后把需要的功能进行分解就行了.

  4. EF中的查询方法

    1.Linq to Entity(L2E)查询 默认返回IQueryable类型 2.原生SQL查询和操作 ①DbSet.SqlQuery()和Database.SqlQuery() 返回DbSqlQ ...

  5. (转)eclipse调试java程序的九个技巧

    转自:http://www.cnblogs.com/lingiu/p/3802391.html 九个技巧: 逻辑结构 条件debug 异常断点 单步过滤 跳到帧 Inspect expressions ...

  6. java基础(五)之static关键词的作用

    static关键词的作用 1.静态成员变量的语法特定2.静态函数的语法特定3.静态代码块的语法特定 定义静态成员变量 Person.java class Person{ static int a; } ...

  7. C++中类成员变量的初始化问题

    C++11之后允许对非静态成员变量进行初始化(in-class initialization),不过对于非fundamental(非基本数据)类型需要采用的是initializer_list来实现的 ...

  8. 【css】用css巧妙实现移动端横向滑动展示功能

    前言:记得以前处理移动端横向滑动展示都是去用js去解决的,要用js进行蛮多处理,要算li的宽度,然后还要用js设置ul盒子的宽度,又要设置最大滑动距离,最小滑动距离等等.......但是现在发现用cs ...

  9. torch.cat拼接 stack拼接 分块chunk

    torch.cat拼接 stack拼接 分块chunk 待办 https://blog.csdn.net/qq_39709535/article/details/80803003 stack dim理 ...

  10. 需要再次删除清空部署才能用rancher部署成功的是docker有问题

    需要再次删除清空部署才能用rancher部署成功的是docker有问题 待办 可以解释为什么一定要用特定的docker版本