LinCoding

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

1
阅读(9703)

启动文件.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


最后祝大家开发顺利!

Baidu
map