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

原文地址:https://www.cnblogs.com/smartjourneys/p/7290720.html