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

嵌入式硬件篇---STM32F103C8T6STM32F103RCT6


文章目录

  • 前言
  • 一、相同点
    • 内核与主频
    • 基础外设
    • 开发环境
  • 二、不同点
    • 1. 存储容量
    • 2. 外设资源
    • 3. 封装与引脚
  • 三、代码移植注意事项
    • 1. 内存与 Flash 限制
      • Flash差异
      • RAM调整
    • 2. 外设差异
      • 外设缺失:
      • GPIO 映射:
    • 3. 中断向量表
      • 中断向量偏移
    • 4. 时钟与总线配置
      • APB分频器
    • 5. 启动文件与链接脚本
      • 启动文件选择:
      • 链接脚本修改
    • 6. 库函数与宏定义
      • 设备宏定义:
      • 外设使能宏
  • 四、移植步骤示例
    • 更换启动文件
    • 修改设备宏
    • 调整链接脚本
    • 检查外设代码
    • 验证GPIO配置
  • 五、总结
    • 兼容性
    • 调试工具
    • 官方文档


前言

STM32F103C8T6 和 STM32F103RC6 同属 STM32F103 系列,基于 ARM Cortex-M3 内核,但在资源、封装和外设上存在差异。


一、相同点

内核与主频

均采用 ARM Cortex-M3 核心,最高主频 72 MHz
指令集中断控制器(NVIC)系统时钟配置(SYSCLK)完全兼容。

基础外设

支持通用外设:GPIOADC(12 位)定时器(TIM)USARTSPII2C 等。

使用相同的标准外设库(如 STM32 Standard Peripheral Library)或 HAL 库开发

开发环境

支持 Keil MDKIARSTM32CubeIDE 等工具链,代码框架一致。

二、不同点

1. 存储容量

型号 Flash RAM
STM32F103C8T6 64 KB 20 KB
STM32F103RC6 256 KB 48 KB

2. 外设资源

外设 STM32F103C8T6 STM32F103RC6
GPIO 数量 37 个 51 个
定时器 (TIM) 3 个通用定时器 4 个通用定时器 + 2 高级定时器
USART 3 个 5 个
SPI/I2C 2 个 SPI / 2 个 I2C 3 个 SPI / 2 个 I2C
USB/CAN 不支持 支持 USB 2.0 和 CAN
DMA 通道 7 通道 12 通道

3. 封装与引脚

型号 封装类型 引脚数
STM32F103C8T6 LQFP48 48
STM32F103RC6 LQFP64 64

三、代码移植注意事项

1. 内存与 Flash 限制

Flash差异

Flash 差异:若从 C8T6 移植到 RC6,需确保代码未超过原 64 KB 限制;反向移植时需检查代码是否超过 RC6 的 256 KB。

RAM调整

RAM 调整:动态内存分配(如堆栈大小)需根据目标芯片调整(startup_stm32f10x_xx.s 启动文件中需修改堆栈配置)。

2. 外设差异

外设缺失:

C8T6 无 USB/CAN,若代码中使用了这些外设,移植到 C8T6 需删除相关代码通过宏定义隔离

RC6 的**额外定时器(如 TIM4、TIM5)**或 USART4/USART5 需重新配置。

GPIO 映射:

因引脚数量不同,需检查硬件连接是否与目标芯片的 GPIO 引脚兼容(如 RC6 的 PB8 可能对应 C8T6 未引出的引脚)。

3. 中断向量表

中断向量偏移

中断向量偏移:Flash 容量不同可能导致中断向量表地址偏移,需在代码中确认 VECT_TAB_OFFSET 设置(通过 SystemInit() 函数或链接脚本调整)。

4. 时钟与总线配置

APB分频器

APB 分频器:若代码涉及 APB1/APB2 总线时钟分频,需确保目标芯片支持相同配置(通常无差异,但需验证)。

5. 启动文件与链接脚本

启动文件选择:

C8T6 使用 startup_stm32f10x_md.s(中等容量)
RC6 使用 startup_stm32f10x_hd.s(大容量)
需在工程中更换对应的启动文件。

链接脚本修改

链接脚本修改:调整 Flash 和 RAM 的地址范围(如 STM32F103C8T6_FLASH.ld 和 STM32F103RC6_FLASH.ld)。

6. 库函数与宏定义

设备宏定义:

在 stm32f10x.h 中需修改设备宏,例如:

// 对于 C8T6
#define STM32F10X_MD
// 对于 RC6
#define STM32F10X_HD

外设使能宏

外设使能宏:若使用 USB/CAN,需在 stm32f10x_conf.h 中开启 USE_USB_FSUSE_CAN

四、移植步骤示例

更换启动文件

更换启动文件:根据目标芯片选择 startup_stm32f10x_md.s 或 hd.s。

修改设备宏

修改设备宏:在编译器预定义宏中设置 STM32F10X_MD 或 STM32F10X_HD。

调整链接脚本

调整链接脚本:更新 Flash 和 RAM 的起始地址及大小。

检查外设代码

检查外设代码:删除或隔离目标芯片不支持的外设(如 USB/CAN)。

验证GPIO配置

验证 GPIO 配置:根据硬件原理图重新映射引脚

五、总结

兼容性

兼容性:基础功能代码(如 GPIO、USART)可无缝移植,但需注意外设和引脚差异

调试工具

调试工具:建议使用 ST-Link 配合 STM32CubeMX 快速验证引脚配置和时钟树

官方文档

官方文档:参考 **STM32F103xx 数据手册(DS5319)参考手册(RM0008)**获取详细差异信息。

通过以上步骤,可高效完成两款芯片间的代码移植,同时避免硬件资源不匹配问题。


相关文章:

  • 用单目相机和apriltag二维码aruco实现单目定位
  • 小程序滚动条隐藏(uniapp版本)
  • CSS元素动画篇:基于当前位置的变换动画(合集篇)
  • Spring Boot 微服务打包为 Docker 镜像并部署到镜像仓库实战案例
  • Manus联合创始人:公司产品基于Claude和阿里千问大模型开发
  • 【项目归档】数据抓取+GenAI+数据分析
  • 【安装指南】Docker 安装最新版 Nginx 并进行项目的编排
  • 《Linux macOS :GCC升级方法》
  • rhce第二次作业
  • Elasticsearch 中的索引模板:如何使用可组合模板
  • 快速搭建并学会使用Mybatis!!
  • Linux中进程的属性:进程优先级
  • Pytorch-CUDA版本环境配置
  • The Traitor King (10 player 25 player)
  • 哈希函数详解(SHA-2系列、SHA-3系列、SM3国密)案例:构建简单的区块链——密码学基础
  • 游戏引擎学习第256天:XBox 控制器卡顿和修复 GL Blit 伽玛问题
  • 数据分析与可视化实战:从鸢尾花到乳腺癌数据集
  • AI日报 · 2025年5月03日|Perplexity 集成 WhatsApp,苹果传与 Anthropic 合作开发 Xcode
  • list类的详细讲解
  • day13 python不平衡数据集的处理(补)
  • 黄仁勋:中国AI市场将达500亿美元,美国企业若无法参与是巨大损失
  • 上海市委政法委召开会议传达学习总书记重要讲话精神
  • 金价大反攻,国内金饰价格涨回千元,能否重返巅峰?
  • 青岛双星名人集团董事长发公开信称家人逼迫交出管理权?公司回应
  • 山东滕州一车辆撞向公交站台撞倒多人,肇事者被控制,案件已移交刑警
  • 经济日报头版刊文:为什么贸易战没有出路