嵌入式硬件篇---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)完全兼容。
基础外设
支持通用外设:GPIO、ADC(12 位)、定时器(TIM)、USART、SPI、I2C 等。
使用相同的标准外设库(如 STM32 Standard Peripheral Library)或 HAL 库开发。
开发环境
支持 Keil MDK、IAR、STM32CubeIDE 等工具链,代码框架一致。
二、不同点
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_FS 或 USE_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)**获取详细差异信息。
通过以上步骤,可高效完成两款芯片间的代码移植,同时避免硬件资源不匹配问题。