Skip to main content

01 芯片介绍

芯片内核、外设、总线

up的视频讲解: https://space.bilibili.com/1455872040

1 ◾️芯片​

1.1 芯片型号​

STM32F103C8T6 是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器, 它的命名规则如下:

  • ST:指意法半导体

  • M:指定微处理器

  • 32:表示计算机处理器位数

  • F103:是ST公司产品系列

ARM Cortex内核
  • ARM 公司在用Cortex命名,MCU内核并分成A、R和M三类

  • M系列有M0、M0+、M3、M4、M7

  • Cortex-M3是ARM公司推出MCU内核,ST公司在此内核的基础上完成了USART、DMA等外围电路的设计。

1.2 芯片架构​

图片

目前主要有两种最广泛 分别是 冯诺伊曼架构 和 哈佛架构,它们的区别在于:两者的 储存空间 以及 总线 对于 指令和数据 的划分方式不同

  • 冯诺伊曼主张:指令与数据 共用存储空间也共用总线,这样使用起来更加灵活

  • 而哈佛架构则主张: 指令与数据分开,指令它专属的存储空间也有它专属的总线 同理 数据也有它专属的存储空间和总线

STM32的架构采用的架构 不是严格将指令与数据分开的哈佛架构 而是一种 改良型的哈佛架构,这种架构它可以把程序中的一些常量数据放到flash里面,很显然比全部放到ram里面的成本要更低

哈佛架构和冯诺依曼架构对比
  • 冯・诺依曼架构: 指令、数据共用同一条总线、同一块存储空间

  • 冯・诺依曼架构优势:结构简单、内存空间灵活, 主要应用于通用计算机(PC)

  • 哈佛架构: 指令、数据完全分离:两套独立存储器 + 两套独立总线

  • 哈佛架构优势:执行效率高、实时性强, 主要应用于微控制器(MCU)

1.3 芯片下载方式​

  • SWD(Serial Wire Debug)下载 + 调试

    • 工具:ST-Link

    • 硬件连接:仅需 2 根线(SWDIO + SWCLK)+ 电源(3.3V)+ GND,无需占用额外引脚。

    • 烧录软件:IDE 直烧(Keil MDK、STM32CubeIDE)

  • UART 串口下载(ISP 模式)仅下载

    • 工具:无需仿真器,仅需 USB-TTL(CH340) 模块

    • 硬件连接:UART1 的 TX/RX 引脚 + 电源 + GND,配合 BOOT0 引脚拉高进入 ISP 模式

    • 烧录软甲:STM32CubeProgrammer(Windows/Linux 通用)

1.4 芯片启动方式​

图片

芯片启动方式:STM32官方提供了3种程序加载方式

  • 1 Flash 启动 (日常开发)

  • 2 系统存储器启动 进入芯片内置的 ST Bootloader(串口下载模式)

  • 3 内置 SRAM 启动 调试时直接从 RAM 运行代码(极少用)

本教程默认方式
  • 本教程采用STLINK工具, 将代码通过IDE工具直接烧录进芯片的Flash里面

  • 所以硬件上直接将BOOT0下拉到地, 默认从Flash启动程序

1.5 芯片寻址方式​

图片

这个是内存映射图 芯片内部的存储空间有很多,为了让CPU精确的找到这个存储空间就需要给每一个存储空间一个专属的编号,而这个编号也就是这些存储空间的地址

  • Cortex-M3的通用寄存器和主要整数运算数据宽度为32位,同时具有32位地址空间;数据宽度与地址空间是相关但不同的概念

  • 32位一共能列出 2的32次方个不同的编号 用科学计数法表示也就是4乘10的9次方 也就是4GB

地址要写完整

F103C8T6的主Flash从0x08000000开始,标称64 KB范围到0x0800FFFF;SRAM从0x20000000开始,20 KB范围到0x20004FFF。外设区域从0x40000000附近展开,不同外设有自己的基地址。

正常Flash启动时,Flash还映射到启动别名区。不要把图中的地址前缀0x0800当成完整地址,向量表和寄存器寻址都需要完整数值。

2 📊芯片内部资源简介​

2.1 芯片总线​

除了上述Cortex-M3 内核内部的三条 “专用总线”, 其他的总线也需要我们了解下:

  1. DMA总线: 实现 “内存→外设”“外设→内存”“内存→内存” 的高速数据搬运,无需 CPU内核参与, 可以并行完成任务

  2. Bus Matrix(总线矩阵): 连接所有总线, 是所有总线的 “交通枢纽”, 定义好了地址与各外设的映射关系, CPU可直接通过地址去与外设交互

  3. AHB 系统总线: 连接所有高速设备 + 桥接低速总线, 是整个APB1/APB2外设系统的 “根总线”

    • RCC(复位与时钟控制)整个时钟树的源头,必须挂高速总线

    • DMA连接AHB;本课程F103C8T6具有DMA1,不能把其他型号的DMA2也算进来

  4. APB1/APB2 外设总线:通过Bridge1/Bridge2桥接器, 把高速 AHB 总线转换为低速 APB 总线,挂载中低速外设。

    • APB1(最高36MHz) USART2/3、SPI2、I2C1/2、TIM2/3/4、USB、CAN 等中低速外设

    • APB2(最高72MHz) GPIO、USART1、SPI1、ADC1/2、TIM1 等高速外设

2.2 芯片外设​

图片

下面按本课程的STM32F103C8T6整理。上方系列框图用于理解总线关系,图中出现的资源不代表当前型号全部具有。

总线/位置本型号的主要资源
AHBDMA1、RCC、CRC、Flash接口等
APB1TIM2/3/4、USART2/3、SPI2、I2C1/2、USB、CAN、BKP、PWR、WWDG、IWDG及RTC相关接口
APB2GPIO、AFIO、EXTI、ADC1/2、USART1、SPI1、TIM1
内核NVIC、SysTick等

C8T6没有片内DAC、ADC3、TIM8、UART4/5或DMA2。GPIO能否作为普通引脚使用,还取决于48引脚封装、晶振和调试接口占用。RTC由备份域和所选低速/分频时钟维持,不是简单跟随APB1频率计秒。

✅把框图和工程联系起来​

F103C8T6的标称Flash是64 KB,SRAM是20 KB。Flash主要存放程序和只读常量,SRAM保存运行时变量、栈和堆。下载程序不等于把程序全放进RAM,定义很大的局部数组却会真实占用栈。

用Keil的map文件找main和一个全局数组的位置,再对照存储器映射。正常Flash启动时,处理器先读取初始栈指针和复位入口,再执行启动代码、运行时初始化和main。BOOT引脚选择启动存储区,不是给用户程序选择“运行速度”。

核对依据:STM32F103数据手册。