STM32F103ZET6代码移植到F103C8T6上的方法及注意事项

目录

  • 1.前言
  • 2.MDK5更改环境配置过程
  • 3.总结
      • 授人鱼,更要授人以渔,希望猿一的本篇博客能对您有所帮助!

1.前言

本篇博客主要是针对STM32F103的程序移植过程步骤及注意事项总结等。

  • 移植芯片:例:STM32F103ZET6------>STM32F103C8T6
  • 编译环境:MDK 5
    网上也有很多关于STM32F103的关于芯片大小容量的更换移植,程序编译无错误无警告,但是运行没有达到想要的效果,比如你要简单的实现一个定时器中断计数脉冲个数,就很觞!!!

2.MDK5更改环境配置过程

STM32F103ZET6代码移植到F103C8T6上的方法及注意事项_第1张图片

  1. 左键点击Options for Target;
  2. 弹出的选项卡方框,单击选择Device;
  3. 将芯片的型号更改,比如我就需要将ZET6系列的芯片修改为C8T6的;
    STM32F103ZET6代码移植到F103C8T6上的方法及注意事项_第2张图片
  4. 选择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

STM32F103ZET6代码移植到F103C8T6上的方法及注意事项_第3张图片

  1. 修改替换CORE文件下的startup_stm32f10x_hd.s文件,右键选着Remove
    Filestartup_stm32f10x_hd.s,移除后双击CORE文件,找到并双击击添加startup_stm32f10x_md.s,最后效果如上图所示;

  2. 最后点击编译或者F7即可;
    STM32F103ZET6代码移植到F103C8T6上的方法及注意事项_第4张图片

  3. 但是你如果用到了延时函数或者定时器,你就会发现最后的效果并不是你想要得到的,比如你延时1S但是最终的结果却是翻了几倍,或者定时器中断无法正常使用等等!这个又怎么办呢?
    这时你可能会去思考既然延时时间不对,那肯定就是延时函数delay.c的问题,于是我们去查找delay的相关函数,如下图
    STM32F103ZET6代码移植到F103C8T6上的方法及注意事项_第5张图片
    找到延时初始化函数delay_init,原来他的时钟HCLK/8的。那么我们可以将它修改为HCLK,就用系统时钟是不是就可以了呢?答案是对的,可以,没有问题;但是也仅限于你初学者移植下点灯而已,这是没有问题的。但你的定时器移植过来还是没法使用,所以修改delay_init方法是可以的,但是我不是很推荐。
    STM32F103ZET6代码移植到F103C8T6上的方法及注意事项_第6张图片
    最后检查问题,几经波折,发现原来是md和hd的启动文件中的一些差别,导致移植到C8T6上后,你必须自己在主程序中去调用一下SystemInit(),这样就能成功了,也不用你去修改delay文件、考虑时钟分频的问题。
    注:以上代码例子来源参考于正点原子,仅供学习交流。

3.总结

1.型号更换
2.C/C++配置选项更改
3.启动文件的更换
4.主函数里加入SystemInit()初始化【针对于C8T6】
5.系统文件夹里的函数可以修改,但对初学者还是尽量不要去修改、不推荐,你应该去思考问题根源所在;

授人鱼,更要授人以渔,希望猿一的本篇博客能对您有所帮助!

你可能感兴趣的:(STM32学习笔记)