本篇博客主要是针对STM32F103的程序移植过程步骤及注意事项总结等。
附:
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,最后效果如上图所示;
但是你如果用到了延时函数或者定时器,你就会发现最后的效果并不是你想要得到的,比如你延时1S但是最终的结果却是翻了几倍,或者定时器中断无法正常使用等等!这个又怎么办呢?
这时你可能会去思考既然延时时间不对,那肯定就是延时函数delay.c的问题,于是我们去查找delay的相关函数,如下图
找到延时初始化函数delay_init,原来他的时钟HCLK/8的。那么我们可以将它修改为HCLK,就用系统时钟是不是就可以了呢?答案是对的,可以,没有问题;但是也仅限于你初学者移植下点灯而已,这是没有问题的。但你的定时器移植过来还是没法使用,所以修改delay_init方法是可以的,但是我不是很推荐。
最后检查问题,几经波折,发现原来是md和hd的启动文件中的一些差别,导致移植到C8T6上后,你必须自己在主程序中去调用一下SystemInit(),这样就能成功了,也不用你去修改delay文件、考虑时钟分频的问题。
注:以上代码例子来源参考于正点原子,仅供学习交流。
1.型号更换
2.C/C++配置选项更改
3.启动文件的更换
4.主函数里加入SystemInit()初始化【针对于C8T6】
5.系统文件夹里的函数可以修改,但对初学者还是尽量不要去修改、不推荐,你应该去思考问题根源所在;