3.N32G452GPIO和AFIO

GPIO是一种通用输入/输出接口,分为多个组,支持多种工作模式,包括输入和输出模式,以及复用功能。每个GPIO引脚可配置为模拟输入、浮空、下拉或上拉输入,和开漏或推挽输出。复用功能模式允许GPIO与外设共享引脚。软件可重新映射I/O复用功能以适应不同需求。此外,GPIO配置还可以锁定以防止意外更改。
摘要由CSDN通过智能技术生成

概述

GPIO即通用性I/O,AFIO即复用功能I/O。芯片最多支持97个GPIO,共分为7组(GPIOA/GPIOB/GPIOC/GPIOD/GPIOE/GPIOF/GPIOG),每组 16个端口(F 组共 10 个,G 组共 7 个)。GPIO 端口和其他的复用外设共用引脚,用户可以根据需求灵活配置。每个 GPIO 引脚都可以独立配置成输出、输入或复用的外设功能端口。除了模拟功能引脚外,其他的 GPIO引脚都有大电流通过能力。

GPIO的工作模式

四种输入模式

  • GPIO_Mode_AIN:模拟输入
  • GPIO_Mode_IN_FLOATING:浮空输入
  • GPIO_Mode_IPD:下拉输入
  • GPIO_Mode_IPU:上拉输入

四种输出模式

  • GPIO_Mode_Out_OD:开漏输出
  • GPIO_Mode_Out_PP:推挽输出
  • GPIO_Mode_AF_OD:开漏复用功能
  • GPIO_Mode_AF_PP:推挽复用功能

输出速度

  • GPIO_INPUT:输入
  • GPIO_Speed_2MHz:低速
  • GPIO_Speed_10MHz:中速
  • GPIO_Speed_50MHz:高速

IO端口的基本结构

在这里插入图片描述
我们所用到的每一个GPIO其内部结构都是这样,分别对应着GPIO的八种模式 这里我们简单的介绍下:

  • 保护二极管: IO引脚上那个二极管用于防止引脚外部过低,造成引脚损坏,当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁 。
  • 上拉、下拉电阻:控制引脚默认状态的电压,开启上拉的时候引脚默认电压为高电平,开启下拉的时候引脚默认电压为低电平
  • 施密特触发器:基本原理是当输入电压高于正向阈值电压,输出为高;当输入电压低于负向阈值电压,输出为低;IO口信号经过触发器后,模拟信号转化为0和1的数字信号 也就是高低电平。
  • P-MOS管和N-MOS管:信号由P-MOS管和N-MOS管,依据两个MOS管的工作方式,使得GPIO具有“推挽输出”和“开漏输出”的模式 ,P-MOS管高电平导通,低电平关闭,下方的N-MOS低电平导通,高电平关闭

在这里插入图片描述
在这里插入图片描述
输入模式

当 I/O 端口配置为输入模式时:

  • 出现在 I/O 脚上的数据在每个 APB2 时钟被采样到输入数据寄存器
  • 对输入数据寄存器的访问可以得到 I/O 状态
  • 输出缓冲器被禁止
  • 施密特触发输入被激活
  • 根据输入配置(上拉,下拉或浮空)的不同,弱上拉和下拉电阻被连接

输出模式

当 I/O 端口配置为输出时:

  • 施密特触发输入被激活,出现在 I/O 脚上的数据在每个 APB2 时钟被采样到输入数据寄存器,对输入数据寄存器的读访问可得到 I/O 状态
  • 弱上拉和下拉电阻被禁止
  • 输出缓冲器被激活
    • 开漏模式: 输出寄存器上的’0’激活 N-MOS,引脚输出低电平
      输出寄存器上的’1’使端口置于高阻状态(P-MOS 从不被激活)
    • 推挽模式: 输出寄存器上的’0’激活 N-MOS,引脚输出低电平
      输出寄存器上的’1’激活 P-MOS,引脚输出高电平
  • 对输出数据寄存器的读访问得到最后写入的值

复用功能模式

当 I/O 端口配置为复用功能时:

  • 施密特触发输入被激活,在每个 APB2 时钟周期,对输入数据寄存器的访问可以得到 I/O 状态,对输入数据寄存器的读访问可得到 I/O 状态
  • 对输出数据寄存器的读访问得到最后一次写的值
  • 弱上拉和下拉电阻被禁止
  • 在开漏或推挽式配置中,输出缓冲器被打开
  • 内置外设的信号驱动输出缓冲器

模拟输入

当IO端口被配置成模拟输入时:

  • 弱上拉和下拉被禁止
  • 读取输入数据寄存器的值为“0”
  • 输出缓冲器被禁止
  • 施密特触发器被禁止,输出值强制为“0”

复位后的状态

复位期间和刚复位后,复用功能未开启, I/O端口被配置成模拟功能模式( PCFGy[1:0]=00b ,PMODEy[1:0]=00b)。但有以下几个例外的信号:

  • BOOT0、NRST、OSC_IN、OSC_OUT 默认无 GPIO 功能:
    • BOOT0 引脚默认输入下拉
    • NRST 上拉输入输出
  • 复位后,调试系统相关的引脚默认状态为启动 SWD-JTAG,JTAG 引脚被置于输入上拉或下拉模式:
    • PA15:JTDI 置于输入上拉模式
    • PA14:JTCK 置于输入下拉模式
    • PA13:JTMS 置于输入上拉模式
    • PB4:NJTRST 置于输入上拉模式
    • PB3:JTD0 置于推挽输出无上下拉
  • PD0 和 PD1 在 80 及以上引脚封装默认为模拟模式
  • PD0 和 PD1 在 80 以下引脚封装复用到 OSC_IN/OUT
  • PC13~15 为备电域下的三个 IO,备份域初次上电默认为模拟模式;
  • PB2/BOOT1:
    • PB2/BOOT1 默认处于下拉输入状态
    • BOOT0 默认输入下拉,参照下表,若 BOOT 的引脚未连接,则默认选择 Flash 主存储区。
    • 在这里插入图片描述

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

为拓展不同器件封装下的复用外设功能灵活性,可以把一些外设复用功能重新映射到其他引脚上。可以通
过软件配置相应的寄存器(AFIO_RMP_CFG, AFIO_RMP_CFGx)来完成。这时,复用功能就和他原来的引
脚断开,重新映射到新的引脚上了。

JTAG/SWD 复用功能重映射

芯片上电默认使能 SWD-JTAG 调试接口,调试接口被映射到 GPIO 端口上,如下表所示。
在这里插入图片描述
如调试期间需要使用其 GPIO 功能,可通过设置 AFIO_RMP_CFG. SW_JTAG_CFG[2:0]位,可以改变上述
重映像配置。参见下表。
在这里插入图片描述
实现代码如下

//JTAG模式设置,用于设置JTAG的模式
//mode: jtag,swd模式设置;00, 全使能;01, 使能SWD;10, 全关闭;
//JTAG,SWD但没有NJTRST选项没有写入		  
void JTAG_Set(UINT8 mode)
{
	UINT32 temp;
	temp = mode;
	temp <<= 25;
	RCC->APB2PCLKEN |= 1<<0;     //开启辅助时钟	   
	AFIO->RMP_CFG &= 0XF8FFFFFF; //清除MAPR的[26:24]
	AFIO->RMP_CFG |= temp;       //设置jtag模式
} 

外设的 IO 配置

![在这里插入图片描述](https://img-blog.csdnimg.cn/2bb22c7a50814e89a2199e39794eb625.p
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
GPIO 锁定机制

锁定机制用于冻结 IO 配置以防止被意外更改。当在一个端口位上执行了锁定(LOCK)程序,在下一次复
位之前,不能再更改端口的配置,参考端口配置锁定寄存器 GPIOx_PLOCK_CFG。

GPIO的初始化

void GPIO_Init(void)
{
	GPIO_InitType GPIO_InitStructure;	//定义初始化结构体

	 RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);//使能引脚时钟
	  GPIO_InitStructure.Pin        = Pin;
      GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_InitPeripheral(GPIOx, &GPIO_InitStructure);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值