【原创】相同程序更换STM32时,需要修改的地方,你知道吗
1赞【主题】:相同程序更换STM32芯片,需要修改的地方,你知道吗
【作者】:LinCoding
【时间】:2016.11.4 起稿
2016.11.10 修改
【声明】:转载、引用,请注明出处
11月4日发表的这篇博客被推到了首页,但是这是笔者第一次发博客,格式什么的比较乱,这几天也很忙,所以今天有空,就把格式重新调整一下,大家看着也舒服,真心觉得这个是很实用的。尤其是对于初学者来说。
因为笔者只用过STM32F1系列,这里说的是STM32F1系列的芯片,STM32F4和F7系列的由于没有用过,所以不知道是不是这样。
好了,总之就是三步走
一、换启动文件(附件中我放了STM32的所有启动文件,大家也不用来回找了)
二、换Device
三、换全局的宏定义
以下详细阐述:
1、换启动文件:就是进行堆栈之类初始化, 中断向量表以及中断函数定义,利用SystemInit();函数引导程序进入函数的一大推程序,大家也不用深究,官网给了详细的解释,如下:
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
那么如何确定你所用的芯片是大容量、中容量、还是小容量呢?方法官网也说了
也就是说根据你芯片的命名就能知道你应该用哪个启动文件,例如:我使用的是STM32F103ZET6,那么就应该使用大容量的启动文件startup_stm32f10x_hd.s,就这么简单而已,如下图所示。
2、换Device,这个就很简单了,先点击那个魔术棒,然后点Device,然后就可以更换了
三、更换全局宏定义:
方法也很简单,先点击魔术棒,然后再C/C++里面的Define里输入:拿笔者的STM32F103ZET6位例:STM32F10X_HD,USE_STDPERIPH_DRIVER,注意,因为笔者的STM32是大容量,所以是这样输入的。那么我们如何确定自己应该输入什么呢,首先还是应该知道你的芯片属于大容量、中容量、小容量还是互联型,这在第一步已经说的很清楚了。
下面讲一讲为什么要这么写,
首先STM32F10X_HD和USE_STDPERIPH_DRIVER是分开的
先说USE_STDPERIPH_DRIVER
我们知道我们在写程序时候一定会在main.c中包含一个叫做#include "stm32f10x.h"的东西,如果用的是原子的战舰的话,是在#include "sys.h"的里面有这个,总之就是必须包含这个,类似于使用51单片机时候的#include "reg52.h"一样
然后,在8297行,会有这个条件编译,意思是,只有你定义了USE_STDPERIPH_DRIVER,才会 #include "stm32f10x_conf.h",而这个里面,有非常重要的外设包含,如果没有包含这个,你哪个外设也用不成。
再说STM32F10X_HD,
同样,还是在"stm32f10x.h"中,297行,有如下条件编译
也就是说,里边定义了一些中断向量的寄存器地址,也就说说每一个系列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
最后祝大家开发顺利!