LinCoding

【原创】相同程序更换STM32时,需要修改的地方,你知道吗

1
阅读(10367)

启动文件.zip

【主题】:相同程序更换STM32芯片,需要修改的地方,你知道吗

【作者】:LinCoding

【时间】:2016.11.4     起稿

                  2016.11.10   修改

【声明】:转载、引用,请注明出处

       11月4日发表的这篇博客被推到了首页,但是这是笔者第一次发博客,格式什么的比较乱,这几天也很忙,所以今天有空,就把格式重新调整一下,大家看着也舒服,真心觉得这个是很实用的。尤其是对于初学者来说。

 因为笔者只用过STM32F1系列,这里说的是STM32F1系列的芯片,STM32F4和F7系列的由于没有用过,所以不知道是不是这样。

       好了,总之就是三步走

       一、换启动文件(附件中我放了STM32的所有启动文件,大家也不用来回找了)

       二、换Device

         三、换全局的宏定义

       以下详细阐述:

      1、换启动文件:就是进行堆栈之类初始化, 中断向量表以及中断函数定义,利用SystemInit();函数引导程序进入函数的一大推程序,大家也不用深究,官网给了详细的解释,如下:

blob.png

startup_stm32f10x_cl.s           ——互联型的器件

包括:STM32F105xx,STM32F107xx

startup_stm32f10x_hd.s         ——大容量器件

包括:STM32F101xx,STM32F102xx,STM32F103xx

startup_stm32f10x_hd_vl.s     ——大容量器件

包括:STM32F100xx

startup_stm32f10x_ld.s           ——小容量器件

包括:STM32F101xx,STM32F102xx,STM32F103xx

startup_stm32f10x_ld_vl.s      ——小容量器件

包括:STM32F100xx

startup_stm32f10x_md.s         ——中容量器件

包括:STM32F101xx,STM32F102xx,STM32F103xx

startup_stm32f10x_md_vl.s     ——中容量器件

包括:STM32F100xx

       那么如何确定你所用的芯片是大容量、中容量、还是小容量呢?方法官网也说了

blob.png

blob.png

     也就是说根据你芯片的命名就能知道你应该用哪个启动文件,例如:我使用的是STM32F103ZET6,那么就应该使用大容量的启动文件startup_stm32f10x_hd.s,就这么简单而已,如下图所示。

blob.png

       2、换Device,这个就很简单了,先点击那个魔术棒,然后点Device,然后就可以更换了

blob.png

blob.png

      三、更换全局宏定义:

      方法也很简单,先点击魔术棒,然后再C/C++里面的Define里输入:拿笔者的STM32F103ZET6位例:STM32F10X_HD,USE_STDPERIPH_DRIVER,注意,因为笔者的STM32是大容量,所以是这样输入的。那么我们如何确定自己应该输入什么呢,首先还是应该知道你的芯片属于大容量、中容量、小容量还是互联型,这在第一步已经说的很清楚了。  

blob.png

      下面讲一讲为什么要这么写,

      首先STM32F10X_HD和USE_STDPERIPH_DRIVER是分开的

      先说USE_STDPERIPH_DRIVER

      我们知道我们在写程序时候一定会在main.c中包含一个叫做#include "stm32f10x.h"的东西,如果用的是原子的战舰的话,是在#include "sys.h"的里面有这个,总之就是必须包含这个,类似于使用51单片机时候的#include "reg52.h"一样

blob.png

      然后,在8297行,会有这个条件编译,意思是,只有你定义了USE_STDPERIPH_DRIVER,才会 #include "stm32f10x_conf.h",而这个里面,有非常重要的外设包含,如果没有包含这个,你哪个外设也用不成。

blob.png

      再说STM32F10X_HD,

      同样,还是在"stm32f10x.h"中,297行,有如下条件编译

blob.png

      也就是说,里边定义了一些中断向量的寄存器地址,也就说说每一个系列STM32所对应的这些地址是不同的。这就解释清楚了。

      一共有以下这么多可以选择的,那我们该怎么选择呢?还是根据芯片的容量啦,和第一步其实是一样的。好了,可用的定义都写在下面了。

         #define STM32F10X_LD 

         #define STM32F10X_LD_VL 

         #define STM32F10X_MD 

         #define STM32F10X_MD_VL 

         #define STM32F10X_HD 

         #define STM32F10X_HD_VL 

         #define STM32F10X_XL  

         #define STM32F10X_CL


        最后祝大家开发顺利!