STM32单片机 RCC与GPIO
一外设 (Peripherals)外设是指与主处理器CPU连接的硬件模块这些模块提供了扩展功能使得单片机可以与外部设备进行交互。常见的外设包括GPIO通用输入/输出用于控制单片机的输入和输出引脚。RCC复位和时钟控制用于配置和管理时钟和复位。USART/UART串行通信接口用于串行通信如RS232。SPI串行外设接口用于高速串行数据传输。I2C集成电路间通信用于连接多个从设备的串行通信。ADC模数转换器将模拟信号转换为数字信号。DAC数模转换器将数字信号转换为模拟信号。定时器Timers用于产生精确的时间间隔或计数事件。每一个外设都需要时钟信号来正常工作这些时钟信号就是由RCC模块来控制。二总线 (Buses)总线是指在单片机内部用于连接CPU、存储器和外设的通信通道。总线负责传输数据、地址和控制信号。STM32单片机中主要有以下几种总线AHB高级高速总线用于连接高速外设和存储器如Flash和SRAM。AHB总线具有较高的传输速率。APB高级外设总线用于连接低速外设如UART、SPI、I2C等。APB总线的传输速率相对较低但功耗较低。AXI高级可扩展接口主要用于高级STM32系列的高性能总线系统支持更高的带宽和复杂的总线仲裁机制。三总线与外设的关系外设通过总线与CPU和存储器进行通信。总线提供了数据传输的路径而外设执行具体的功能。不同的外设通过不同的总线连接依据其带宽和速度要求。例如高速外设如USB或Ethernet通常连接到AHB总线而低速外设如I2C和UART则连接到APB总线。总结来说外设是实现特定功能的硬件模块而总线是连接这些模块和CPU的通信路径。两者共同作用使得STM32单片机能够实现各种复杂的功能。四RCCReset and Clock Control复位和时钟控制负责管理微控制器的时钟树还有外设的晶振、内部振荡器以及各种时钟源的分频和倍频。可以控制各个外设的时钟使能确保只有当前使用设备才会消耗能量。什么是外设时钟指用于驱动外设模块的时钟信号。每个外设模块如USART、SPI、I2C、ADC、GPIO等需要一个时钟信号来同步其内部操作和数据传输。RCC库函数在rcc.h文件中//最常用的3个函数 //控制高级高速总线AHB上的某个外设的时钟参数1指定要控制的AHB外设时钟参数2选择使能还是失能 void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);**************************************************************************************************************//该函数是由RCC模块来控制连接在AHB总线上的外设的时钟信号。void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);//该函数是由RCC模块来控制连接在APB2总线上的外设的时钟信号。void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);//该函数是由RCC模块来控制连接在APB1总线上的外设的时钟信号。void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);**************************************************************************************************************不清楚哪个外设连接在哪个总线跳转定义查看。若跳转定义失败重新编译。RCC_AHBPeriph可以是* param RCC_AHBPeriph: specifies the AHB peripheral to gates its clock. * STM32互联型的设备可以在这个列表选择 * For b STM32_Connectivity_line_devices, this parameter can be any combination * of the following values: * arg RCC_AHBPeriph_DMA1 * arg RCC_AHBPeriph_DMA2 * arg RCC_AHBPeriph_SRAM * arg RCC_AHBPeriph_FLITF * arg RCC_AHBPeriph_CRC * arg RCC_AHBPeriph_OTG_FS * arg RCC_AHBPeriph_ETH_MAC * arg RCC_AHBPeriph_ETH_MAC_Tx * arg RCC_AHBPeriph_ETH_MAC_Rx * * 其他设备在下面列表选择 * For b other_STM32_devices, this parameter can be any combination of the * following values: * arg RCC_AHBPeriph_DMA1 * arg RCC_AHBPeriph_DMA2 * arg RCC_AHBPeriph_SRAM * arg RCC_AHBPeriph_FLITF * arg RCC_AHBPeriph_CRC * arg RCC_AHBPeriph_FSMC * arg RCC_AHBPeriph_SDIO * * note SRAM and FLITF clock can be disabled only during sleep mode.RCC_APB2Periph可以是* param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. * This parameter can be any combination of the following values: * arg RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB, * RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE, * RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1, * RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1, * RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3, * RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17, * RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10, RCC_APB2Periph_TIM11RCC_APB1Periph可以是* param RCC_APB1Periph: specifies the APB1 peripheral to gates its clock. * This parameter can be any combination of the following values: * arg RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4, * RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7, * RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3, * RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4, * RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2, * RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP, * RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_CEC, * RCC_APB1Periph_TIM12, RCC_APB1Periph_TIM13, RCC_APB1Periph_TIM14五GPIOGeneral Purpose input/output通用输入输出引脚GPIO基本结构内核可以通过APB2总线对寄存器进行读写完成输出电平和读取电平输出寄存器寄存器写1对应引脚输出高电平0低电平输入寄存器寄存器写1对应引脚为高电平0低电平寄存器为32位其中低16位对应PA0-15高16位没用驱动器增加信号驱动力GPIO位结构GPIO_Mode输入模式GPIO_Mode_AIN (0x0)定义模拟输入模式。特点引脚作为模拟信号输入使用通常用于ADC模数转换器。应用场景模拟传感器信号输入。GPIO_Mode_IN_FLOATING (0x04)定义浮空输入模式。特点引脚处于高阻态无内部上拉或下拉电阻输入状态完全由外部电路决定。悬空电平会不停跳动应用场景外部电路提供明确电平信号。如果外部的输入信号功率很小内部上拉电阻可能影响到这个输入信号就可以使用浮空输入。GPIO_Mode_IPD (0x28)定义下拉输入模式。特点引脚内部连接下拉电阻未连接外部电路时默认低电平。应用场景开关或按钮未按下时引脚保持低电平。GPIO_Mode_IPU (0x48)定义上拉输入模式。特点引脚内部连接上拉电阻未连接外部电路时默认高电平。应用场景开关或按钮未按下时引脚保持高电平。输出模式GPIO_Mode_Out_OD (0x14)定义开漏输出模式。特点引脚可以输出低电平或高阻态不主动驱动高电平需要外部上拉电阻来拉高电平。高电平相当于高阻态没有驱动能力低电平有驱动能力应用场景I2C总线、多个设备共用一条信号线。GPIO_Mode_Out_PP (0x10)定义推挽输出模式。特点引脚可以主动驱动高电平和低电平输出驱动能力强。高低电平均有驱动能力应用场景普通的数字输出如LED控制。复用功能模式GPIO_Mode_AF_OD (0x1C)定义复用开漏输出模式。特点引脚用于复用功能如USART、I2C等输出开漏模式需要外部上拉电阻。高电平相当于高阻态没有驱动能力低电平有驱动能力引脚控制权来自于输出数据寄存器如果想要使用复用开漏/推挽输出应用场景I2C总线、复用功能需要开漏输出的场合。GPIO_Mode_AF_PP (0x18)定义复用推挽输出模式。特点引脚用于复用功能输出推挽模式能主动驱动高低电平。高低电平均有驱动能力应用场景复用功能如USART、SPI等要求强输出驱动能力。输出配置框图普通开漏 / 推挽输出复用开漏 / 推挽输出GPIO库函数在gpio.h文件中//复位GPIO外设参数可以是GPIOA、GPIOB等等 void GPIO_DeInit(GPIO_TypeDef* GPIOx); //复位AFIO外设 void GPIO_AFIODeInit(void); //重要 //用结构体参数来初始化GPIO口 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); //把结构体变量赋一个默认值 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct); //下面4个是GPIO读取函数 uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //读取输入寄存器某一端口的输入值 uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); //读取整个输入数据寄存器 uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //读取输出数据寄存器的某一位 uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); //读取整个输出数据寄存器 //下面4个是GPIO写入函数 void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //将指定端口设置为高电平 void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //将指定端口设置为低电平 void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); //同时对16个端口进行写入操作 // void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); void GPIO_EventOutputCmd(FunctionalState NewState); void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState); void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource); void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);输出模式下可控制端口输出高低电平用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等输入模式下可读取端口的高低电平或电压用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等STM32引脚定义图注意A15、B3、B4口默认是JTAG的调试端口如果要用作普通端口还要进行一些配置JTAGJoint Test Action Group是一种标准的测试和调试接口用于测试和调试集成电路IC包括微控制器如STM32。JTAG是一种串行接口标准IEEE 1149.1允许在芯片上进行调试、编程和测试。

相关新闻

Stable-Audio-Tools 入门指南:条件音频生成模型的训练、推理与 Gradio 界面跑通

Stable-Audio-Tools 入门指南:条件音频生成模型的训练、推理与 Gradio 界面跑通

Stable-Audio-Tools 入门指南:条件音频生成模型的训练、推理与 Gradio 界面跑通 【免费下载链接】stable-audio-tools Generative models for conditional audio generation 项目地址: https://gitcode.com/GitHub_Trending/st/stable-audio-tools Stable-Au…

2026/10/19 1:12:12 阅读更多 →
3步上手Nemotron-3-Diarization:generate与generate_stream说话人分离调用实战教程

3步上手Nemotron-3-Diarization:generate与generate_stream说话人分离调用实战教程

【免费下载链接】Nemotron-3-Diarization 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Nemotron-3-Diarization 点击查看 免费下载 Nemotron-3-Diarization 是一款基于 MLX 框架的说话人分离(Speaker Diarization)模型&…

2026/10/19 1:12:12 阅读更多 →
2022 年 12 月青少年软编等考 C 语言七级真题解析

2022 年 12 月青少年软编等考 C 语言七级真题解析

目录 T1. 走迷宫 思路分析 T2. 重建二叉树 思路分析 T3. 快速堆猪 思路分析 T4. 表达式 表达式树 表达式求值 思路分析 T1. 走迷宫 题目链接:SOJ D1233 一个迷宫由 R R R 行 C C C 列格子组成,有的格子里有障碍物,不能走;有的格子是空地,可以走。给定一个迷宫,求从…

2026/10/19 1:11:12 阅读更多 →

最新新闻

FuzzFeed: An Automatic Approach to Weakest Precondition Generation using LLMs and Fuzzing

FuzzFeed: An Automatic Approach to Weakest Precondition Generation using LLMs and Fuzzing

文章主要内容和创新点 主要内容 本文提出了一种名为FuzzFeed的自动生成最弱前置条件(Weakest Precondition, WP)的方法,该方法结合大语言模型(LLMs)和模糊测试(fuzzing)技术,通过模糊测试引导(Fuzzing Guidance, FG)机制优化LLM生成的候选WP,最终提高WP的正确性和…

2026/10/19 1:58:27 阅读更多 →
从网易云和 QQ 音乐批量补齐 LRC 歌词:163MusicLyrics 上手教程

从网易云和 QQ 音乐批量补齐 LRC 歌词:163MusicLyrics 上手教程

从网易云和 QQ 音乐批量补齐 LRC 歌词:163MusicLyrics 上手教程 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 刚整理完一大批曲库,播放器里却有…

2026/10/19 1:58:27 阅读更多 →
如何为Eclim编写自定义插件:完整分步教程让Vim支持你的语言

如何为Eclim编写自定义插件:完整分步教程让Vim支持你的语言

【免费下载链接】eclim Expose eclipse features inside of vim. 项目地址: https://gitcode.com/gh_mirrors/ec/eclim 点击查看 免费下载 Eclim 是一款把 Eclipse 强大功能"搬进" Vim 的开源工具,而它的多语言支持完全靠插件实现——每一门语…

2026/10/19 1:58:27 阅读更多 →
Meta SecAlign: A Secure Foundation LLM Against Prompt Injection Attacks

Meta SecAlign: A Secure Foundation LLM Against Prompt Injection Attacks

文章主要内容总结 该论文介绍了Meta SecAlign,这是首个开源、开放权重的大型语言模型(LLM),其内置模型级防御机制,旨在抵御提示注入(Prompt Injection, PI)攻击,同时保持商业级模型的性能。 研究背景:提示注入攻击是LLM集成应用的主要安全威胁,现有模型级防御虽有效…

2026/10/19 1:58:27 阅读更多 →
【Python3基础】05-容器数据类型

【Python3基础】05-容器数据类型

[TOC] 🛫 系列文章导航 【Python3基础】01-Python 环境与开发工具【Python3基础】02-输入输出与程序运行【Python3基础】03-基本数据类型与表达式【Python3基础】04-字符串与格式化【Python3基础】05-容器数据类型【Python3基础】06-条件判断与循环【Python3基础】…

2026/10/19 1:58:27 阅读更多 →
Folia Sync-Server 完整部署指南:10 分钟让 AI 主题多端同步

Folia Sync-Server 完整部署指南:10 分钟让 AI 主题多端同步

Folia Sync-Server 完整部署指南:10 分钟让 AI 主题多端同步 【免费下载链接】folia-major 专注于绚丽的歌词动画效果的本地音乐/navidrome/第三方多平台在线音乐播放器 项目地址: https://gitcode.com/GitHub_Trending/fo/folia-major Folia 是一款本地优先…

2026/10/19 1:57:24 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →