1.前言
本篇博客主要是针对STM32F103的程序移植过程步骤及注意事项总结等。
- 移植芯片:例:STM32F103ZET6------>STM32F103C8T6
- 编译环境:MDK 5
网上也有很多关于STM32F103的关于芯片大小容量的更换移植,程序编译无错误无警告,但是运行没有达到想要的效果,比如你要简单的实现一个定时器中断计数脉冲个数,就很觞!!!
2.MDK5更改环境配置过程
- 左键点击Options for Target;
- 弹出的选项卡方框,单击选择Device;
- 将芯片的型号更改,比如我就需要将ZET6系列的芯片修改为C8T6的;
- 选择C/C++选项,修改Define里面的内容,将STM32F10X_HD,USE_STDPERIPH_DRIVER修改为STM32F10X_MD,USE_STDPERIPH_DRIVER(其实你只需要修改一个字母将H修改为M即可注意大写哦),因为ZET6是属于大容量的而C8T6是属于中容量的;
附:
flash容量 | 启动文件 |
---|---|
>= 256K | STM32F10X_HD,USE_STDPERIPH_DRIVER |
64<=flash<=128K | STM32F10X_MD,USE_STDPERIPH_DRIVER |
<=32K | STM32F10X_LD,USE_STDPERIPH_DRIVER |
-
修改替换CORE文件下的startup_stm32f10x_hd.s文件,右键选着Remove
Filestartup_stm32f10x_hd.s,移除后双击CORE文件,找到并双击击添加startup_stm32f10x_md.s,最后效果如上图所示; -
最后点击编译或者F7即可;
-
但是你如果用到了延时函数或者定时器,你就会发现最后的效果并不是你想要得到的,比如你延时1S但是最终的结果却是翻了几倍,或者定时器中断无法正常使用等等!这个又怎么办呢?
这时你可能会去思考既然延时时间不对,那肯定就是延时函数delay.c的问题,于是我们去查找delay的相关函数,如下图
找到延时初始化函数delay_init,原来他的时钟HCLK/8的。那么我们可以将它修改为HCLK,就用系统时钟是不是就可以了呢?答案是对的,可以,没有问题;但是也仅限于你初学者移植下点灯而已,这是没有问题的。但你的定时器移植过来还是没法使用,所以修改delay_init方法是可以的,但是我不是很推荐。
最后检查问题,几经波折,发现原来是md和hd的启动文件中的一些差别,导致移植到C8T6上后,你必须自己在主程序中去调用一下SystemInit(),这样就能成功了,也不用你去修改delay文件、考虑时钟分频的问题。
注:以上代码例子来源参考于正点原子,仅供学习交流。
3.总结
1.型号更换
2.C/C++配置选项更改
3.启动文件的更换
4.主函数里加入SystemInit()初始化【针对于C8T6】
5.系统文件夹里的函数可以修改,但对初学者还是尽量不要去修改、不推荐,你应该去思考问题根源所在;