stm32中AFIO重映射功能及如何在标准库中配置AFIO

文章目录

概要

在stm32标准库的学习中我们经常会见到AFIO这个名词,但网络上的大部分教程对于AFIO的讲解较为模糊,也很少有讲解说到AFIO的作用与如何在标准库中配置AFIO,导致大部分初学者学习AFIO的时候很模糊或者直接cv,所以本人斗胆用一个实际例子来讲解AFIO的配置原理。

整体架构流程

1.为什么要配置AFIO

2.如何配置AFIO

3.在stm32标准库下如何找到AFIO

技术名词解释

AFIO:为了优化64脚或100脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用 重映射和调试I/O配置寄存器(AFIO_MAPR)实现引脚的重新映射。这时,复用功能不再映射到它 们的原始分配上。 这句话来自stm32参考手册,我们可以从中大概知道的是AFIO的作用就是把一些功能重映射到其他引脚上来解决复用冲突的情况(如何区分不清楚 通用 复用 重映射的区别的可以看我另一篇文章)

理论讲解部分(全是重点建议逐字学习)

首先我们用一个实际案例来引入AFIO(图片来源于铁头山羊教学)

在上图中我们可以知道的是,我们要用stm32定时器TIM1的四个通道来控制两个个电机,用stm32的USART1的TX和RX来与外部通信,但这个时候就出问题了,如果你读过stm32的引脚定义表,你会发现当 PA9   引脚被复用时定时器TIM1_CH2会和串口USART1_TX冲突(PA10同理),

但在我们的案例中我们想同时使用TIM1_CH2和USART_TX 那么这个时候我们就需要重映射TIM1_CH2或者是USART_TX(如果不知道重映射是啥建议看我前面的文章)


我们分两种情况来分别讨论

1.重映射TIM1 _CH2

我们打开参考手册翻到 8.3.7 页找到定时器TIM1的重映射,我们发现有三种重映射方式 1.没有重映射2.部分重映射 3.完全重映射 ,我们上面已经解释过了引脚冲突所有没有重映射这种情况排除,我们来看部分重映射 发现部分重映射值重映射了 TIM1_BKIN  TIM1_CH1N  TIM1_CH2N TIM1_CH3N 但并没有解决我们TIM1_CH2的冲突问题所以部分重映射这种映射方式解决不了我们的问题,那么我们看第三种 完全重映射,在完全重映射的情况下,我们TIM1的所有通道都改变了复用引脚,在这种映射方式下,我们解决了TIM1_CH2和USART_TX的引脚冲突问题,但是还有一个问题就是完全重映射它适用的类型时144个和100个引脚的单片机(完全重映射上面有个小(1)对应下面适用情况),若我们使用C8T6这样48个引脚的stm32就会不适用,所以我们第三种情况也暂时排除

2.USART1_TX重映射

我们继续看参考手册翻到8.3.8,找到USART1的重映射,发现在 USART1_REMAP = 1,这种情况下我们的TX被重映射为PB6解决了引脚冲突这个问题,但这个时候同学们就会有疑问USART1_REMAP = 1,是什么意思呢?这个问题我们留到编程的时候解决


代码讲解部分

回到标准库本身,我们在底层驱动文件中找AFIO,后发现没有AFIO的驱动文件,这是怎么一回事呢?其实是因为ST公司偷懒把AFIO的驱动文件和函数接口都放到gpio.c 和gpio.h 里面去了,这其实并不严谨虽然AFIO的函数很少但也不应该把它放到gpio里面去。

打开gpio.h滑倒最下面我们可以找到下图中的几个函数,这些函数就是AFIO的全部函数接口(图片片来源于铁头山羊教程)

而我们要用的是则是GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);这个函数,我们再来看看这个函数有哪些功能,它有两个参数第一个GPIO_Remap, 这个参数可以是(具体请看下图)

然后第二个参数是FunctionalState NewState这是应该枚举类型,我们继续跳转,发现这个NewState参数可以是ENABLE和DISABLE.

了解完这个函数的参数,我们继续以上面的实例进行编程。

下图的示例代码讲解了三种情况 1.对USART1进行重映射  2.对TIM1进行部分重映射 3.对TIM1进行完全重映射(图片来源于铁头山羊教程)

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值