STM32基础篇:AFIO × 查表重映射 × AFIO库函数

AFIO简介

AFIO,直译为:复用输入输出,是STM32上众多的片上外设之一;我们知道当IO引脚复用功能冲突时,可以通过重映射来解决这个问题,而AFIO就是专门用来执行"复用功能的重映射"的模块(可以看出其名字与功能并不一致)。

注意,IO重映射只是重映射的一种。


查表重映射(流程)

在STM32的芯片上有许许多多的片上外设,其中有一部分片上外设能够使用AFIO模块,对它的复用功能进行重映射。因此,在STM32的参考手册(RM0008)中,不同模块的重映射使用方法分别用一个小节来解释(共12小节,即12个模块的重映射功能),并且是我们编程AFIO的依据。

1、分配引脚功能

假如我们要同时使用定时器1与串口通信(如下图所示),在分配IO引脚时就会发现冲突:定时器1的四个通道(CH1、CH2、CH3、CH4)所对应IO引脚分别为PA8、PA9、PA10、PA11;而串口通信的Px、Tx所对应IO引脚为PA10、PA9,因此两组引脚冲突

此时要通过AFIO解决引脚冲突(重新分配引脚功能),分别查一下这两个片上外设的IO重映射表。如下图所示,为定时器1的重映射表。


2、定时器重映射表

可以看出有3个映射方案:

方案一无重映射重映射值=00使用默认(通用)情况下的IO引脚
方案二部分重映射重映射值=01对模块的一部分引脚重映射
方案三完全重映射重映射值-11对模块的所有引脚重映射

可以看出在此工程下,定时器1无法使用重映射:方案1、2不改变对应的IO引脚;方案3虽然能改变引脚,但对于C8T6芯片而言,不存在GPIOE,故无法使用重映射。


3、串口重映射表

其表格分为两列:

第一列REMAP=0,即无重映射,使用默认的IO引脚;

第二列REMAP=1,进行重映射,IO引脚被改变;

因此可以使用USART1的重映射,来解决引脚冲突的问题。


AFIO的标准库函数

AFIO的驱动程序

在STM32的标准库的文件夹中存在一个一个的模块(h和c文件),例如:GPIO模块的驱动就位于stm32f10x_gpio.h(头文件)和stm32f10x_gpio.c(源文件)这两个文件中。

值得注意的是,AFIO的编程接口同样放在stm32f10x_gpio.h和stm32f10x_gpio.c这两个文件中,也就是说和GPIO驱动放在了一块


AFIO编程接口

AFIO一共有4个编程接口(库函数),如下图所示:


GPIO_PinRemapConfig

要想实现上例工程,需要配置IO引脚的重映射,故使用GPIO_PinRemapConfig函数即可。对于GPIO_PinRemapConfig函数,有两个参数,第一个为需要配置重映射的具体模块和方案;第二个为开启/关闭选择

以定时器1为例:参数GPIO_PartialRemap_TIM1是指定时器1模块、方案2;GPIO_FullRemap_TIM1指定时器1、方案3。


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值