历史上的今天
今天是:2024年12月24日(星期二)
2021年12月24日 | STM32的AFIO时钟什么时候需要开启
2021-12-24 来源:eefocus
相比于普通单片机,STM32 拥有复杂的时钟系统,相应的控制器称为 RCC(Reset Clock Controller,复位与时钟控制器)。每个外设都配备了外设时钟的开关,当我们不使用某个外设时,可以把这个外设时钟关闭,从而降低 STM32 的整体功耗。因此,在我们使用外设前,必须要开启相应外设的时钟。可以使用的库函数有:
void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
显然,在开启外设时钟前,先要知道该外设挂载在哪个总线上。以 GPIOC 的 pin4 引脚为例:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
STM32 中的大部分 GPIO 都有复用功能,所以对于有复用功能的 I/O 引脚,还要开启其复用功能时钟。如 GPIO 的 pin4 可以用作 ADC1 的输入引脚,当我们把它作为 ADC1 使用时,需要开启 ADC1 的时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
另外, STM32 的所有 GPIO 都引入到 EXTI 外部中断线上,使得所有的 GPIO 都能作为外部中断的输入源。所以如果把 GPIO 用作 EXTI 外部中断时,还需要开启 AFIO 时钟。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
那么,问题来了!
AFIO 是什么?AFIO 时钟什么时候需要开启?
我们从《STM32中文参考手册_V10》中找到:对寄存器 AFIO_EVCR、AFIO_MAPR 和 AFIO_EXTICRX 进行读写操作前,应当首先打开 AFIO 的时钟(设置 APB2 外设时钟使能寄存器 RCC_APB2ENR)。
也就是说:当你需要配置 AFIO 这些寄存器的时候,就需要把 RCC_APB2ENR 寄存器的 AFIO 位置‘1’打开 AFIO 时钟。
跟 AFIO 相关的寄存器有:
事件控制寄存器(AFIO_EVCR)
复用重映射和调试I/O 配置寄存器(AFIO_MAPR)
外部中断配置寄存器1(AFIO_EXTICR1)
外部中断配置寄存器2(AFIO_EXTICR2)
外部中断配置寄存器3(AFIO_EXTICR3)
外部中断配置寄存器4(AFIO_EXTICR4)
看看这些寄存器的定义,我们就明白,这些寄存器是用于“事件控制”、“重映射”、“调试IO配置”、“外部中断”的。例如 AFIO_EXTICRX 用于选择 EXTIx 外部中断的输入源。
总结:当我们需要配置这些 AFIO 寄存器的时候,就需要打开 RCC_APB2ENR 寄存器的 AFIO 时钟,而不是用到引脚复用功能的时候打开。
史海拾趣
|
奇怪,我的VS2005找得到WINCE5模拟器,却启动不成功。WINCE5模拟器是完全安装VS2005是装上去的。 奇怪,我的VS2005在模拟器管理里找得到WINCE5模拟器,却启动不成功。WINCE5模拟器是完全安装VS2005是装上去的。… 查看全部问答> |
|
现在想把wince5 模拟成U盘,用了wince5的源码usbfn,storage目录中。 注册表也做了相应的改动,现在pc机已经能够识别出Upan。 可是在通信过程中,PC机老是会发 0x23指令,而次指令并不支持。导致reset。 在网上查到: 一个U盘插上,Windows要连 ...… 查看全部问答> |
|
请教大家一个线程的切换问题:请高手们指点指点 在我的程序中用到好几个线程,而且在线程中频繁用到SLEEP()延时函数, 这样可能会造成线程间的频繁切换,可能会使软件的运行效率降低, 我想知道两个线程之间的切换需要多少时间 ...… 查看全部问答> |
|
请问下大家,比如我在做一个项目,想把一些数据存储在flash当中的一个扇区里,但是如果这个扇区损坏了,除了备份以外我们怎么做才能保证数据不丢失或仍然可用呢?软件或硬件的方法都可以,大家帮忙讨论下,谢谢大家… 查看全部问答> |
|
SOIC窄体16PIN1.27mm脚距,这种封装在元件库里焊盘一般宽和长是多少? SOIC窄体16PIN1.27mm脚距,这种封装在元件库里焊盘一般宽和长是多少? 在orcad中发现宽有0.6mm,长竟然有2.5mm。 焊盘的画法是否有相应的标准来参照啊… 查看全部问答> |
|
timing toggle active inactive四种模式有什么区别 比较匹配时,输出管脚可以保持它的电平(OCxM=000)、 被设置成有效电平(OCxM=001)、 ?? 被设置成无有效电平(OCxM=010) ? ? 或进行翻转 ...… 查看全部问答> |
|
转载的:(http://blog.163.com/qhrong718@126/blog/static/882427522011024567513/?fromdm&isFromSearchEngine=yes) 一,滤波电路中使用的片式钽电容器的性能选择 滤波电路是片式钽和氧化铌电容器最常用电路, 电容 ...… 查看全部问答> |




