stm32f407移植f103
stm32f407移植f103
更多
将基于 STM32F103 的代码移植到 STM32F407 需要解决时钟、外设、中断和内存等差异。以下是详细步骤和注意事项:
1. 时钟系统调整
- F103 默认时钟:72 MHz(HSI/PLL)
- F407 默认时钟:16 MHz(HSI),需手动配置至 168 MHz
- 修改时钟配置:
// 在 system_stm32f4xx.c 中调整 PLL 参数 #define PLL_M 8 // 外部晶振 8MHz #define PLL_N 336 #define PLL_P 2 // SYSCLK = 168 MHz #define PLL_Q 7 // USB/SDIO等需要 48 MHz注意:需确保外部晶振频率匹配(如 8MHz)。
2. 启动文件更换
- 替换启动文件:
- 删除 F103 的
startup_stm32f10x_hd.s(大容量型号) - 添加 F407 的启动文件:
startup_stm32f407xx.s(位于 STM32CubeF4 库中)
- 删除 F103 的
- 修改中断向量表:在
main.c中重定位 VTOR(如果使用自定义位置):SCB->VTOR = FLASH_BASE | 0x00; // 默认向量表地址
3. 外设驱动修改
(1) GPIO 配置
-
速度模式差异:
// F103(50MHz 输出) GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // F407(100MHz 输出) GPIO_InitStructure.Speed = GPIO_SPEED_HIGH; - 复用功能映射:
- F407 需通过
GPIO_PinAFConfig()设置 AF 模式:GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
- F407 需通过
(2) USART/UART
- 波特率计算:
- F407 的 USART 分频器精度更高(BRR 寄存器为 12.4 位),需重新计算:
// 波特率 115200,时钟 168MHz huart1.Init.BaudRate = 115200;
- F407 的 USART 分频器精度更高(BRR 寄存器为 12.4 位),需重新计算:
(3) SPI/I2C
- 时钟分频:根据系统时钟调整分频系数(F407 时钟更快)。
- I2C 时序:F407 的 I2C 时序寄存器需重新计算(使用 CubeMX 工具生成)。
4. 中断处理
-
中断向量名称变更:
// F103 void USART1_IRQHandler(void); // F407(名称相同,但向量位置不同) void USART1_IRQHandler(void); // 保持同名,但需确保启动文件匹配 - NVIC 优先级:F407 支持更多优先级位(4位),配置时注意范围:
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F; // 优先级范围 0-15
5. 存储器映射调整
- Flash/RAM 大小:
- F103:通常 64-512KB Flash,20-64KB RAM
- F407:通常 1MB Flash,192KB RAM
- 修改链接脚本(.ld 文件):
/* F407VG 的链接脚本示例 */ MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 192K FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 1024K }
6. 第三方库和驱动
- HAL/LL 库:
- 删除 F1 的 HAL 库(如
STM32F1xx_HAL_Driver)。 - 添加 F4 的 HAL 库(如
STM32F4xx_HAL_Driver)。
- 删除 F1 的 HAL 库(如
- 文件系统/网络栈:
- 检查依赖的硬件抽象层(如 SPI Flash 驱动需适配 F4 的 SPI)。
7. 低功耗与电源管理
- 电源模式差异:
- F407 支持更多模式(如 SLEEP、STOP、STANDBY)。
- 修改停机模式下的唤醒配置(如使用 WKUP 引脚)。
8. 编译环境配置
- 编译器宏定义:
- 将
STM32F10X_HD改为STM32F407xx。 - 添加全局宏:
USE_HAL_DRIVER。
- 将
- 包含路径:
- 更新 HAL 库路径指向 F4 的库。
常见问题解决
-
程序卡在启动阶段:
- 检查时钟配置(尤其 PLL 参数)。
- 确认启动文件是否匹配(如
startup_stm32f407xx.s)。
-
外设无法工作:
- 验证 GPIO 复用功能配置(
GPIO_PinAFConfig())。 - 检查外设时钟使能(F407 的外设总线为
AHB1/AHB2):__HAL_RCC_GPIOA_CLK_ENABLE(); // F407 的 GPIOA 在 AHB1 __HAL_RCC_USART1_CLK_ENABLE(); // USART1 在 APB2
- 验证 GPIO 复用功能配置(
-
中断不触发:
- 确认中断向量表地址(
SCB->VTOR)正确。 - 检查 NVIC 配置是否被覆盖。
- 确认中断向量表地址(
推荐工具
- STM32CubeMX:自动生成 F4 的初始化代码(时钟、外设)。
- ST-Link Utility:擦写芯片并验证内存。
- 逻辑分析仪:抓取 SPI/I2C 时序调试。
通过逐步对比数据手册和外设库,重点解决时钟与寄存器差异,即可完成移植。
把STM32F407的程序移植到STM32F103的芯片上面,需要修改哪些内容?
把STM32F407的程序移植到STM32F103的芯片上面,需要修改哪些内容?
2024-04-10 07:38:47
在 STM32CubeIDE 中针对 STM32F407 移植 ThreadX
在 STM32CubeIDE 中针对 STM32F407 移植 ThreadX,不依赖盗版破解的Keil MDK、IAR等软件。
资料下载
生龙活虎3
2021-12-04 13:36:06
STM32F407 DCMI摄像头源码
STM32F407 DCMI摄像头源码(电源技术存在的问题总结)-【资源描述】:STM32F407 DCMI摄像头源码【编程语言】:C语言
资料下载
h1654155275.0032
2021-09-16 16:15:00
国产优秀替代_APM32F407替代STM32F407记录
前言 最近一段时间在玩极海的APM32F407系列的MCU,在研究一段时间后发现其资源和意法半导体的STM32F407不相上下。通过对比两者的数据手册和参考手册,我发现APM32
2022-05-10 11:22:36
7天热门专题
换一换
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 如何进行编码器的正确接线?接线方法介绍
- 什么是场效应管?它的作用是什么?
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- amoled屏幕和oled区别
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 苹果笔记本macbookpro18款与19款区别
- 通讯隔离作用
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机