0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于STM32的 I/O 复用功能

Q4MP_gh_c472c21 来源:strongerHuang 作者:strongerHuang 2022-10-20 14:19 次阅读

今天给大家分享两点内容: 一是,为什么我们要先开启STM32外设时钟;二是,关于STM32的 I/O 复用功能及什么时候开启AFIO时钟。

STM32为什么要先开启外设时钟?

相信很多朋友都曾遇到过这种坑,我最初学习STM32的时候同样也遇到过。下面,我就来说说为什么我们要先开启STM32外设模块时钟,再对其外设模块初始化配置?

1、系统架构

不同类型的STM32,它的系统架构各有不同,但原理都类似,由多条主控总线和多条被控总线组成(请参看【参考手册】存储器和总线架构章节)。

以STM32F4为例:

八条主控总线:

— Cortex-M4F 内核 I 总线、 D 总线和 S 总线 — DMA1 存储器总线 — DMA2 存储器总线 — DMA2 外设总线 — 以太网 DMA 总线 — USB OTG HS DMA 总线 ● 七条被控总线: — 内部 Flash ICode 总线 — 内部 Flash DCode 总线 — 主要内部 SRAM1 (112 KB) — 辅助内部 SRAM2 (16 KB) — 辅助内部 SRAM3 (64 KB)(仅适用于 STM32F42xxx 和 STM32F43xxx 器件) — AHB1 外设(包括 AHB-APB 总线桥和 APB 外设) — AHB2 外设 — FSMC 67bffb8c-5034-11ed-a3b6-dac502259ad0.jpg   借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。 2、关于AHB和APB总线 AHBAdvanced High-performance Bus,即先进的高性能总线。 APB:Advanced Peripheral Bus,即先进的外围(外设)总线。 上面说了系统总线的架构引伸出来的就是AHB和APB总线,那为什么要讲述AHB和APB总线呢? 我们操作的外围设备一般都是位于AHB和APB总线上,而AHB可以引伸出AHB1、AHB2,甚至AHB3。同样APB也存在APB1、APB2等。 比如,USART1外设位于APB1总线上,GPIOA位于AHB1高速总线上。 请注意参考手册中“AHB/APB 总线桥”这一小节,有一条重要的内容:每次芯片复位后,所有外设时钟都被关闭( SRAM 和 Flash 接口除外)。使用外设前,必须在 RCC_AHBxENR 或 RCC_APBxENR 寄存器中使能其时钟3、STM32时钟控制 请参看STM32参考手册关于【复位与时钟控制RCC】章节。 67e695a8-5034-11ed-a3b6-dac502259ad0.jpg   STM32的时钟控制模块因MCU芯片不同,各有差异,但原理都类似,功能也相当丰富。主要的目的就是给相对独立的外设模块提供时钟,也是为了降低整个芯片的功能。 降低功耗是主要原因,还有一个原因,就是为了兼容不同速度的设备,有些高速,有些低速,如果都用高速时钟,势必造成浪费。 RCC给外设提供时钟是一个主要目的,那么为什么要提供时钟呢?原因在于外围设备的寄存器需要时钟才能工作。你可以把外设当做一个设备,而这个设备需要给它供电(时钟)才能工作。 你在STM32参考手册的“RCC”章节可能会看到这么一句话:当外设时钟没有启用时,软件不能读出外设寄存器的数值,返回的数值始终是0x04、总结 看到这里,相信聪明的你已经明白了为什么我们要先开启STM32外设模块时钟,再配置其外设模块了。 简单来说,就是操作外设是通过外设总线来实现,只有外设总线有时钟了才能操作外设。 坑: A.先使能外设时钟,再对其进行配置 6843b698-5034-11ed-a3b6-dac502259ad0.jpg   B.时钟配置需对应总线 6873d6de-5034-11ed-a3b6-dac502259ad0.png   这种基于标准外设库的低级错误,相信肯定有不少人遇到过,希望提高警惕。  

AFIO复用时钟

有朋友问:“什么时候开启AFIO时钟”。写了上面章节,就顺便再讲述一下关于STM32的I/O复用功能及什么时候开启AFIO时钟。

1、什么是I/O 复用功能?

简单来说,就是把普通I/O用作其它的功能。如:将PA9引脚用作USART1的Tx引脚,那么我们就把这个Tx引脚称为PA9的复用功能。

打开数据手册,会发现类似如下的列表:

68868482-5034-11ed-a3b6-dac502259ad0.jpg

2、什么时候开启AFIO时钟?

为了优化芯片引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用重映射和调试I/O配置寄存器实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上,而是映射到“重定义功能”上(见上图)。

这种将引脚重定义到其它引脚上的功能在几乎所有STM32芯片中都有这个功能,但是实现的方法可能有所不同,其中STM32F1就是通过事件控制的方式将特定功能引脚连接到对应PORT和PIN上。

简单来说,如果需要使用重定义功能,那么就需要开启AFIO时钟。

最后,如果你觉得你的程序可能是因为时钟配置的问题,不妨上电第一步使能所有时钟试试。

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7150

    浏览量

    161998
  • STM32
    +关注

    关注

    2239

    文章

    10673

    浏览量

    348770
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130306

原文标题:STM32为什么要先开启外设时钟?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    求助,STM32复用功能功能问题

    我使用的上STM32F103R8,它的PB3跟PA15的复用功能分别是:JTDO跟JTDI ,请问怎样设置才能把它当作普通的I/O口来用啊?
    发表于 05-14 14:45

    STM32-IO-AFIO(复用功能IO和调试配置)

    管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能
    发表于 07-06 00:27

    请问STM32F0x的复用功能映射表在哪里

    注: 有关系统和外设复用功能 I/O 引脚映射的详细信息,请参见 STM32F0x 数据手册中的“复用功能映射”表下载了英文手册,浏览了一遍
    发表于 02-28 06:59

    请问怎么理解STM32中的引脚复用功能?

    不是很理解STM32中的引脚复用功能?
    发表于 03-28 04:42

    请问I/O复用功能有什么作用?

    在回头复习GPIO的模式设置时,看到以前自己忽略掉的端口复用功能。现在想以前自己做串口 CAN总线实验是都没有打开端口的复用功能,但实验却也做成功了。现在想想端口复用功能到底有什么作用?难道就是在端口的重映射时才需要打开
    发表于 04-27 23:26

    stm32时钟配置“隐藏”了哪些坑?

    今天分享以下两点内容:1.为什么我们要先开启STM32外设模块时钟;2.关于STM32I/O 复用功
    发表于 05-29 08:53

    I/O口具有哪些特性应用功能

    I/O口是单片机与外界联系的通道。它可对各类外部信号(开关量、模拟量、频率信一号)进行检测、判断、处理,并可控制各类外部设备。那么I/O口具有哪些特性应
    发表于 03-05 08:03

    为什么我们要先开启STM32外设模块时钟

    置顶公众号,不错过每一条消息!今天分享以下两点内容:1.为什么我们要先开启STM32外设模块时钟;2.关于STM32I/O
    发表于 08-18 07:46

    什么是STM32I/O 复用功能呢?什么时候开启AFIO时钟

    为什么我们要先开启STM32外设模块时钟呢?什么是STM32I/O 复用功能呢?什么时候开启AFIO时钟?
    发表于 11-22 06:23

    端口复用映射原理及GPIO外设复用功能配置过程

    文章目录端口复用端口复用映射原理原理示意图映射配置系统功能GPIO外设复用功能配置过程GPIO 端口时钟使能复用外设时钟使能端口模式配置为
    发表于 12-09 07:20

    如何去设置STM32 GPIO的复用功能

    STM32GPIO有多少种复用功能呢?如何去设置STM32 GPIO的复用功能呢?
    发表于 12-15 07:55

    怎样去配置STM32F10x系列I/O端口的复用功能

    STM32F10x系列具有哪些I/O端口呢?怎样去配置STM32F10x系列I/O端口的
    发表于 01-27 07:11

    怎样选择STM32I/O口的模式呢

    手册即可。2.STM32上有很多I/O口,也有很多的内置外设像I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内置外设基本上是与I
    发表于 03-02 07:28

    STM32功能引脚重映射和复用功能

    STM32功能引脚重映射和复用功能
    发表于 09-29 08:02 12次下载

    使用STM32开发为什么要先开启外设模块?什么时候开启AFIO时钟?

    1.为什么我们要先开启STM32外设模块时钟; 2.关于STM32的 I/O 复用功能及什么时候开启AFIO时钟;
    的头像 发表于 09-24 12:35 8262次阅读
    使用<b class='flag-5'>STM32</b>开发为什么要先开启外设模块?什么时候开启AFIO时钟?