当前位置: 首页 > news >正文

RCC_APB2PeriphClockCmd

RCC_APB2PeriphClockCmd 函数在STM32的标准外设库中扮演着“电源开关”的角色。要理解这个函数,我们需要明白STM32微控制器的几个关键概念:

1. 外设时钟与低功耗设计

STM32内部有非常多的外设,如GPIO(A, B, C...D)、USART1、SPI1、ADC1、定时器1等。为了让芯片更加节能,每个外设都有一个独立的时钟开关。默认情况下,当你给芯片上电后,所有这些外设的时钟都是关闭的,以节省功耗。在你想要使用某个外设(比如想点亮一个LED,需要使用GPIO)之前,你必须先打开这个外设的时钟。否则,外设无法工作,你的程序也无法驱动它。这就像你想用一个电器,必须先插上电源插头一样。

2. 总线架构

STM32内部通过“总线”来连接CPU核心和各种外设。APB2(Advanced Peripheral Bus 2)是其中一条总线,它负责连接一些高速或系统关键的外设RCC_APB2PeriphClockCmd 就是专门管理这条总线上的外设时钟开关的函数。常见挂在APB2总线上的外设有:

  • 所有GPIO端口 (GPIOA, GPIOB, ... GPIOG)

  • 高级定时器 (TIM1, TIM8, TIM9, TIM10, TIM11)

  • 串口1 (USART1)

  • ADC1/ADC2/ADC3

  • SPI1

  • 系统配置控制器 (SYSCFG)

  • ...

3. 函数参数

该函数通常有两个参数:

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
  • RCC_APB2Periph:指定要操作哪个外设的时钟。这是一个宏定义,例如:

    • RCC_APB2Periph_GPIOA

    • RCC_APB2Periph_USART1

    • RCC_APB2Periph_TIM1

    • 你可以使用 | 符号同时开启多个外设的时钟,例如 RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB

  • NewState:指定是开启还是关闭。

    • ENABLE - 打开时钟(相当于接通电源)

    • DISABLE - 关闭时钟(相当于切断电源以省电)

假设你想使用GPIOA的第5引脚来驱动一个LED,并且使用USART1进行串口通信。

在你的程序初始化部分,你必须先开启它们的时钟:

// 在main()函数的开始,初始化外设之前// 1. 开启GPIOA的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);// 2. 开启USART1的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);// 3. 也可以一次性同时开启GPIOA和USART1的时钟
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);// ... 在这之后,才能继续初始化GPIO和USART的参数
GPIO_Init(...);
USART_Init(...);

常见错误

  1. 忘记开启时钟:这是初学者最常犯的错误。症状是代码逻辑看起来完全正确,但外设就是毫无反应。任何外设的使用第一步都是开启其时钟

  2. 搞错总线:除了APB2,还有APB1、AHB等总线。不同的外设挂在不同总线上。

    • APB1:连接的是低速外设,如USART2/3、I2C1/2、SPI2、定时器2/3/4/5/6/7等。操作它们需要使用 RCC_APB1PeriphClockCmd() 函数。

    • 在使用函数前,最好查一下数据手册或编程手册,确认外设挂在哪条总线上。

总结

项目说明
函数名RCC_APB2PeriphClockCmd
所属库STM32标准外设库 (SPL)
功能启用或禁用APB2总线上的外设时钟
重要性至关重要,使用任何外设前必须先调用此函数或其等效函数来开启时钟
类比给外设接通电源
http://www.dtcms.com/a/352386.html

相关文章:

  • sdi开发说明
  • 推荐系统王树森(三)粗排精排
  • STM32的Sg90舵机
  • Python入门教程之字符串类型
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(20):文法+单词第7回2
  • iPhone 17 Pro 全新配色确定,首款折叠屏 iPhone 将配备 Touch ID 及四颗镜头
  • 【测试需求分析】-需求类型的初步分析(二)
  • 【NuGet】引用nuget包后构建项目简单解析
  • day41-动静分离
  • 数字时代下的智能信息传播引擎
  • 仿真干货|解析Abaqus AMD的兼容与并行效率问题
  • 基于硅基流动API构建智能聊天应用的完整指南
  • 使用QML的Rectangle组件的边框属性
  • `stat` 系统调用详解
  • 学习碎片02
  • Firefox Relay 体验
  • Redis支持事务吗?了解Redis的持久化机制吗?
  • 面试八股文之——Java集合
  • 115、【OS】【Nuttx】【周边】效果呈现方案解析:重定向命令
  • Python编程快速上手—让繁琐工作自动化
  • 论文阅读-CompletionFormer
  • (我与爬虫的较量)码上爬第5题
  • JDK 8 → JDK 17 升级说明书(面向 Spring Boot / Spring Cloud / Spring )
  • Filter过滤器入门
  • android 事件处理源码
  • 当 AI 走进日常:除了聊天机器人,这些 “隐形应用” 正在改变我们的生活
  • 报告:2025机器人技术产业化研究|附130+份报告PDF、数据仪表盘汇总下载
  • 直播到AI助教:在线教育系统源码如何重塑知识付费平台生态?
  • 算法练习——26.删除有序数组中的重复项(golang)
  • 电影感氛围人像风光摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!