STM32F103X datasheet学习笔记---GPIOs and AFIOs
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的更多相关文章
- STM32F103X datasheet学习笔记---RCC(reset and clock control)
1.前言 本文主要记录stm32 关于reset 和 clock部分 datasheet的内容. 2.reset 有三种类型的reset:system reset, power reset, back ...
- STM32F103X datasheet学习笔记---Flexible static memory controller (FSMC)
1.前言 FSMC模块能够与同步或异步存储器和16位PC存储器卡接口,它的主要作用是: 将AHB传输信号转换到适当的外部设备协议 满足访问外部设备的时序要求 所有的外部存储器共享控制器输出的地址.数据 ...
- STM32F103X datasheet学习笔记---Interrupts and events
1.前言 本章主要介绍STM32中断和事件相关的内容 2.NVIC NVIC管理着包括内核异常等中断 主要特性 68个外部中断源(不包含16个内部中断线) 可编程优先级为16级 低延迟异常和中断处理 ...
- STM32F103X datasheet学习笔记---DMA
1.前言 直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输. 无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作. 两个DMA控制器 ...
- STM32F103X datasheet学习笔记---USART
1.前言 通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换. USART利用分数波特率发生器提供宽范围的波特率选择. 它支持同步 ...
- ARMV8 datasheet学习笔记5:异常模型
1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构
1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...
- k64 datasheet学习笔记45---10/100-Mbps Ethernet MAC(ENET)之功能描述
1.前言 本文是对K64 datasheet 之ENET部分的功能描述,将对每个部分进行详细说明 2.Ethernet MAC frame formats MAC帧组成格式 (1)7字节前导码:如按最 ...
- k64 datasheet学习笔记3---Chip Configuration之Analog
1.前言 本文主要讲述K64芯片配置,关于模拟部分的内容,主要包括:ADC, CMP, DAC, VREF 2.16bit SAR ADC 从上图可以看出ADC主要挂在外设总线0上,由于ADC的输入引 ...
随机推荐
- java将一个javabean转化为另一个javabean
公司的项目是用webservice来进行前后台对接,启动后台后需要刷服务才能在前台生成对应的代码,但是有一个很恶心的地方,它给每个service都生成了一个model,于是出现后台只有一个javabe ...
- 【转】ls 命令的 20 个实用范例
Linux中一个基本命令是ls.没有这个命令,我们会在浏览目录条目时会遇到困难.这个命令必须被每个学习Linux的人知道. ls是什么 ls命令用于列出文件和目录.默认上,他会列出当前目录的内容.带上 ...
- 【Codeforces 98E】 Help Shrek and Donkey
http://codeforces.com/problemset/problem/98/E (题目链接) 题意 A君有n张牌,B君有m张牌,桌上还有一张反扣着的牌,每张牌都不一样. 每个回合可以做两件 ...
- 压缩和解压缩文件tar, tar.gz and tar.bz2
1, 对于tar.gz 压缩:tar -zcvf archive-name.tar.gz directory-name 解压:tar -zxvf prog-1-jan-2005.tar.gz -C / ...
- CF848E Days of Floral Colours——DP+多项式求逆/分治NTT
官方题解:http://codeforces.com/blog/entry/54233 就是由简入繁 1.序列处理,只考虑一个半圆 2.环形处理(其实这个就是多了旋转同构) 然后基于分割线邻居的跨越与 ...
- zoj3956(Course Selection System)_Solution
zoj3956_Solution H=sum(hi),C=sum(ci),Value=H*H-H*C-C*C 求Value的最大值 Solution: 动态规划: 共两维:H,C ...
- 中南大学2018年ACM暑期集训前期训练题集(入门题) Q: Simple Line Editor
数据有毒,一个一个读字符是错,整个字符串读入,一次就A了. 总之,数据总是没有错的,还是对c++了解地不够深刻,还有,在比赛中,一定要有勇气重构代码 错误代码: #include<iostrea ...
- 十三、java_GUI
目录: 一.AWT 二.组件和容器 三.布局管理器 四.事件处理 五.java图形 六.window事件 一.AWT AWT(Abstract Window Toolkit)包括了很多类和接口,用于J ...
- 过时date.toLocaleString()的解决方法
System.out.println(new java.util.Date()); 输出:Thu Jan 27 14:43:28 CST 2011 System.out.println(new jav ...
- 【Python】统计个人新浪微博词频并给出相应的柱状图
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

