前言

本篇开始DLGXY将记录学习STM32F103C8T6库开发的笔记,学习方式是主要观看B站的江协科技、铁头山羊的视频。学习过程中可以利用AI软件进行铺助学习,比如用自己的语言讲述某个知识点,让AI判断我们自己的理解是否有误,以此来加深印象。

STM32F103C8T6概述

STM32F103C8T6是意法半导体(STMicroelectronics)推出的基于ARM Cortex-M3内核的32位微控制器,属于STM32F1系列中的“中等容量”产品线。该芯片以高性能、低功耗和丰富的外设资源著称,广泛应用于工业控制、消费电子、物联网设备等领域。

命名规则

F103C8T6:F= 通用类型、103 = 增强型、C = 48个引脚、 8 = 64KB Flash存储器、T = LQFP48封装、6 = 温度范围 -40℃ ~ 85℃

核心参数
  • 内核:ARM Cortex-M3,主频72MHz,支持单周期乘法和硬件除法。

  • 存储:64KB Flash存储器,20KB SRAM(包含6KB核心耦合存储器CCM)。

  • 封装:LQFP48,体积紧凑,适合空间受限的设计。

  • 外设:

    • 3个USART、2个SPI、2个I2C接口。

    • 1个USB 2.0全速接口。

    • 2个12位ADC(共10通道),1个12位DAC。

    • 7通道DMA控制器,支持外设数据高效传输。

    • 16位PWM定时器(4通道),支持电机控制

系统结构

 1. 核心大脑:

Cortex-M3 内核 Cortex-M3 是整个芯片的运算核心,它采用了**哈佛架构**,拥有三条独立的总线接口,这是它高性能的基础:

ICode 指令总线:专门负责从 Flash 中读取指令。因为指令流是连续的,让CPU 流水线始终保持满载。

DCode 数据总线:专门用于访问 SRAM 和 Flash 中的数据,只可以写入SRAM。和指令总线分离,实现了“取指”和“取数”的并行操作,避免了总线冲突。

System 系统总线:用于访问外设寄存器和系统控制单元,是内核与外部世界沟通的桥梁。

这种设计让 Cortex-M3 可以在一个时钟周期内同时完成指令读取和数据访问,极大地提升了指令执行效率。 

2. 交通枢纽:

总线矩阵(Bus Matrix) 如果把内核看作“大脑”,那么总线矩阵就是整个芯片的“交通调度中心”。它连接了内核的两条总线、DMA 控制器和 AHB 系统总线,负责管理所有数据的流向。

多主设备支持:内核和 DMA 都可以作为总线“主设备”,同时发起对存储或外设的访问请求。

并行访问能力:比如,内核通过 ICode 总线从 Flash 取指令,同时通过 DCode 总线向 SRAM 搬运数据时,DMA控制器可通过独立的AHB总线访问SRAM搬运数据,两者互不干扰,充分利用了总线带宽。

仲裁机制:当多个主设备同时请求访问同一个从设备时,总线矩阵会根据优先级进行仲裁,确保高优先级任务(如 DMA 传输)优先获得总线使用权。

3. 存储系统:

程序与数据的“仓库” STM32 的存储系统由片内 Flash、SRAM 和可选的外部扩展存储组成,各司其职:

Flash 存储器:通过 Flash 接口与 ICode/DCode 总线相连,是程序代码和常量数据的“永久仓库”。它的容量从几十 KB 到几 MB 不等,支持在线编程(ISP)和在应用编程(IAP),方便固件升级。

SRAM 存储器:直接挂在高速 AHB 总线上,是运行时数据、堆栈和临时变量的“临时货架”。它的速度极快,可以和内核同频运行,保证了数据的高速读写。

FSMC(灵活静态存储控制器):这是一个“扩展坞”,允许你连接外部的 SRAM、NOR Flash、NAND Flash 等存储设备,满足大容量存储的需求,比如在需要存储大量日志或图像数据的应用中。 

4. 动力心脏:

RCC 复位与时钟控制 RCC(Reset and Clock Control)是整个系统的“电源与时钟管家”,它负责两件核心事情:

时钟管理:为内核、总线和所有外设提供精准的时钟信号。你可以通过配置寄存器选择不同的时钟源(内部高速 RC 振荡器 HSI、外部晶振 HSE、锁相环 PLL 等),并为不同外设分配合适的时钟频率。例如,让高速外设(如 SPI1、TIM1)工作在 72MHz,而低速外设(如 RTC、看门狗)工作在 32.768kHz,以平衡性能与功耗。

复位管理:负责系统的上电复位、手动复位和各种异常复位(如看门狗复位、低电压复位)。它确保芯片在任何情况下都能安全启动或重启,是系统可靠性的重要保障。

5. 分层总线:

AHB 与 APB 的分工协作 为了平衡性能和功耗,STM32 采用了**分层总线架构**,将高速设备和低速设备隔离开来:

AHB(Advanced High-performance Bus):高性能总线,连接 DMA、FSMC、SRAM、SDIO 等高速设备。它的时钟频率最高(可达 72MHz 或更高),带宽大,适合大数据量的连续传输。

APB(Advanced Peripheral Bus):外设总线,分为 APB1 和 APB2 两个分支:

APB2:连接高速外设,如 ADC、SPI1、TIM1、GPIO A~G、USART1,时钟频率最高可达 72MHz。

APB1:连接低速外设,如 UART2~5、I2C、CAN、TIM2~7、DAC、PWR,时钟频率最高为 36MHz,以降低功耗。

桥接器(Bridge 1/2):负责 AHB 和 APB 之间的协议转换和数据缓冲。它就像一个“翻译官”,让高速的 AHB 总线可以和低速的 APB 外设高效通信,同时还能在总线空闲时进入低功耗模式。

6. 数据搬运工:

DMA 控制器 DMA(Direct Memory Access)是嵌入式系统中提升性能的“秘密武器”,它可以在不占用 CPU 的情况下,直接在外设和存储器之间传输数据。

双 DMA 控制器:STM32 通常配备 DMA1 和 DMA2 两个控制器:

DMA1:为 APB1 和 APB2 外设提供 7 个通道,支持 ADC、SPI、I2C、USART 等外设的数据传输。

DMA2:为更高速的外设(如 SDIO、FSMC)提供 5 个通道,带宽更高。

典型应用场景:当你需要用 ADC 连续采集模拟信号时,DMA 可以自动将 ADC 数据寄存器中的数据搬运到 SRAM 中,CPU 只需要在传输完成后处理数据即可,无需参与每一次数据移动,从而大幅提升系统的实时性和效率。

7. 功能外设:

丰富的“工具箱” STM32 之所以强大,很大程度上得益于它丰富的外设资源,这些外设就像一个“工具箱”,让你可以快速实现各种功能:

-通用输入输出(GPIO A~G):最基础的外设,用于连接外部传感器、按键、LED、继电器等,实现数字信号的输入和输出。

通信接口:USART/UART(串口)、SPI、I2C、CAN、USB,让你的设备可以和其他模块或上位机进行数据通信。

定时器(TIM1~8):支持 PWM 输出、定时中断、输入捕获、正交编码器接口等功能,广泛应用于电机控制、信号测量、PWM 调光等场景。

模拟外设:ADC(模数转换器)用于采集温度、电压等模拟信号,DAC(数模转换器)用于输出波形或控制模拟设备。

系统外设:实时时钟(RTC)提供精确的时间戳,看门狗(IWDG、WWDG)监控系统运行状态,备份寄存器(BKP)用于在掉电时保存关键数据。

看完了各个模块,我们来总结一下 STM32 系统架构的精妙之处:

1. 哈佛架构带来的并行性:指令和数据总线分离,让 CPU 可以同时取指和取数,显著提升了指令执行效率。

2. 分层总线的能效平衡:AHB 保证高速传输,APB 降低低速外设的功耗,兼顾了性能与节能。

3. DMA 解放 CPU:DMA 负责数据搬运,让 CPU 可以专注于更复杂的计算任务,特别适合实时性要求高的应用。

4. 丰富的外设集成:片上集成了几乎所有常用的外设,减少了外部电路的设计复杂度,缩短了产品开发周期。 

引脚定义

1. 电源与时钟引脚

这是芯片运行的基础,必须正确连接:

  • VBAT (引脚 1):备用电池输入,用于在主电源掉电时给 RTC 实时时钟供电,保持时间不走丢。

  • VDD/VSS (引脚 8,9,24,35,36,47,48):主电源(3.3V)和地引脚,多组设计是为了分散电流、降低噪声。

  • OSC_IN/OSC_OUT (引脚 5,6):外部高速晶振(通常 8MHz)输入输出脚,为系统提供精准时钟。

  • NRST (引脚 7):复位引脚,低电平触发芯片复位,一般接一个 10k 上拉电阻和复位按键。

2. 调试与烧录引脚

这是开发时必须用到的下载和调试接口:

  • PA13 (JTMS/SWDIO, 引脚 34)

  • PA14 (JTCK/SWCLK, 引脚 37)这两个引脚是 SWD 调试接口,只需要两根线就能实现程序下载和在线调试,是最常用的方式。

3. 5V 容忍引脚(FT 标记)

STM32 是 3.3V 芯片,但带 FT 标记的引脚(如 PB0-PB15、PA9-PA12 等)可以直接连接 5V 电平的外设(如 5V 传感器、Arduino),无需额外电平转换,这在跨电压系统中非常实用。

4. 常用外设引脚示例

  • USART1 串口:PA9 (TX, 引脚30)PA10 (RX, 引脚31),默认复用功能就是串口,是最常用的调试输出和通信接口。

  • I2C1 总线:PB6 (SCL, 引脚41)PB7 (SDA, 引脚42),用于连接 I2C 设备(如 OLED、温湿度传感器)。

  • SPI2 总线:PB13 (SCK, 引脚27)PB14 (MISO, 引脚28)PB15 (MOSI, 引脚29),用于高速通信(如 SPI 显示屏、Flash 芯片)。

  • 定时器通道:很多引脚都默认复用为定时器的 PWM 输出或输入捕获通道,比如 PA0 可作为 TIM2_CH1,用于 PWM 控制电机、LED 亮度等。

启动设置

引脚接错的后果

  • 如果BOOT0一直接高电平,芯片会反复进入 ISP 模式,导致你烧录的程序无法运行。
  • 如果误将BOOT1BOOT0都接高,芯片会从 SRAM 启动,而 SRAM 中没有程序,表现为 “芯片没反应”。

开发支持
  • 工具链:支持Keil MDK、IAR Embedded Workbench、STM32CubeIDE等主流开发环境。

  • 库函数:提供标准外设库(SPL)和HAL库,简化外设配置。

  • 调试接口:支持SWD和JTAG,便于程序下载与调试。

典型应用场景
  • 嵌入式系统:如智能家居控制器、数据采集设备。

  • 电机控制:利用PWM和定时器实现BLDC或步进电机驱动。

  • 通信模块:通过USART或SPI连接Wi-Fi、蓝牙模块。

优势与局限
  • 优势:性价比高,生态完善,外设丰富。

  • 局限:Flash和RAM容量较小,复杂应用需优化资源。

该芯片凭借均衡的性能和广泛的社区支持,成为入门级ARM开发的常见选择。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐