关于STM32的AFIO

转自: http://www.lifetyper.com/archives/000016.html


也许你以为IO和AFIO是很简单的,事实上有几个误区可能很多人都没注意过,当你只用现成的开发板来学习的时候,别人已经帮你做好了资源分配,所有的外设功能学习都是照着别人给你的例程去做的,这才没让你觉得奇怪。

先问自己一个问题:STM32中,USART2和TIM2是共用相同IO的,你如何决定这几个IO到底是做USART2还是做TIM2呢?如果你要同时使用USART2和TIM2,该怎么办?

1、不是说使用了IO的复用功能就一定要启动RCC_APB2Periph_AFIO的Clock的,参考下图

When_AFIO_Clock_Is_Needed

只有使用了AFIO的事件控制寄存器AFIO的重映射功能以及外部中断(EXTI)控制寄存器才需要开启AFIO的时钟,STM32参考手册从来没说过使用IO的复用功能就一定要开启AFIO时钟,这是个误区。

例如下面的,最常用的USART1,如果你的板子上,默认用的就是PA9和PA10这两个IO作为USART1的TX和TX,那么也就是没有重映射,No Remap,这种情况下根本不需要开启AFIO时钟,只要开启USART1的外设时钟就行了。这个实验很简单,自己试试就知道了。

UART1_No_Remap

2、从上面的图你可以看到,原来USART1是可以放在PB6和PB7上面的,只不过几乎所有的原理图封装中都不会在PB6和PB7的复用功能上标出它可以当USART1用,毕竟这种重映射的情况太多,几乎所有外设都可以重映射,每个都标出来会非常混乱。

STM32中,USART2的CTS、RTS、TX、RX和TIM2的CH1~CH4都在PA0~PA3上面,具体要如何选择这两个功能呢?

如果要使用USART2,就开始USART2的外设时钟,如果要使用TIM2,就开启TIM2的外设时钟,如果你同时开启,我也不知道会怎么样,你可以自己试试,我觉得应该是两个都不能用。如果你一定要在PA0~PA3上使用这两个功能,只能是时分复用。

正确的同时使用USART2和TIM2,应该是使用上面提到的AFIO_Remap寄存器,将其中的一个重映射到其他IO上去,当然这样其他IO的本身的复用功能你就不能开启了。

USART2_Remap

TIM2_Remap

回到前面的问题,如果你不做Remap,你根本不可能同时在PA0~PA3上同时使用这两个外设,现在你的方案有两种:

一、保留USART2在PA口上,将TIM2完全重映射(Full Remap)到其他IO上,或者,如果你不用RTS和CTS的硬件流控制,PA0(CTS)和PA1(RTS)上对应的CH1和CH2是可以不用重映射的,只需要将Bit9:8改成10,也就是将CH1和CH2继续保留在PA0和PA1上CH3和CH4部分重映射到PB10和PB11上去。但PB10和PB11上的I2C2和USART3就不能用了。

二、保留TIM2在PA口,将USART2重映射到PD口上,很明显,当TIM2完全不重映射时,USART2必须的信号线只有Clock不受影响,这种情况下也没有部分映射可言了,必须将USART2完全重映射到PD3~PD7上,同样的,这种情况下FSMC就不能用了。

具体怎么选择就看你自己了,一般情况下最简单的就是你换个定时器好了,反正定时器那么多,如果非要同时用USART2和TIM2,大部分人可能会选择前一种方案,毕竟FSMC被干掉是非常麻烦的一件事。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32 微控制器中,AFIO(Alternate Function Input/Output)是一个功能模块,用于管理引脚的多功能映射。通过 AFIO,你可以配置引脚的不同功能,例如复用功能、中断、事件输出等。 AFIO 模块主要用于以下几个方面: 1. 引脚复用功能:STM32 微控制器的引脚通常具有多个功能。通过 AFIO,你可以将引脚配置为特定的功能,例如串口、SPI、I2C 等。这样,你可以根据应用的需要,将引脚用于不同的外设或功能。 2. 中断和事件映射:一些外设或模块可以生成中断或事件信号,例如外部中断、定时器中断等。AFIO 模块允许你将这些中断或事件映射到特定的引脚上,以便在发生中断或事件时触发相应的处理程序。 3. 事件输出:某些 STM32 微控制器支持事件输出功能,可以在特定事件发生时,通过 AFIO 将事件信号输出到指定引脚上。这在某些特殊应用中很有用,例如触发外部设备或与其他系统进行同步操作。 为了使用 AFIO 模块,你需要在 STM32 的相关寄存器中进行配置。具体配置方法和寄存器的细节取决于你使用的 STM32 系列和型号。你可以参考相关的文档和参考手册,例如芯片数据手册和参考手册,以获取更详细的信息和示例代码。 总结来说,AFIO 模块是 STM32 微控制器中用于管理引脚多功能映射的功能模块,可以配置引脚的复用功能、中断映射和事件输出等。通过 AFIO,你可以灵活地配置引脚以满足不同的应用需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值