STM32开发项目:STM32CubeIDE中如何手动修改MCU的型号_stm32cube 修改mcu芯片-程序员宅基地

技术标签: stm32  STM32-MCU  单片机  

背景介绍

笔者在开发的时候,习惯应用自己的一套函数扩展库与工程模板,因此每次开始新的项目开发时,就会将上一个项目工程直接复制一份,在其基础上进行开发。当新项目与原项目的单片机型号不一样的时候,就涉及到如何将工程中的单片机型号的修改过来的问题。

本文将以工程中MCU型号从STM32F103C8Tx改为STM32F103VCTx为例,说明一下具体的操作步骤。

操作步骤

修改工程文件.cproject

用文本编辑器(NotePad++)打开.cproject工程文件,采用查找替换的方式,将工程文件中的原单片机型号“STM32F103C8”替换成“STM32F103VC”并保存。.project工程文件中没有需要修改的内容。

删除部分工程文件

删除XXX.elf.launch文件与XXX.map文件,这两个文件默认在工程目录文件夹中,在设置Run/Debug Configurations的时候会自动重新生成。

替换启动文件

将原来型号的启动文件(XXX.s文件)替换为startup_stm32f103vctx.s,这个启动文件可以通过在STM32CubeIDE中新建一个MCU型号为STM32F103VCTx的工程并自动生成代码而获得。也可以在源码中同时保留这些文件,而在Makefile中指定调用的文件名。

替换LinkerScript文件

将原来型号的链接文件(XXX.ld文件)替换为STM32F103VCTX_FLASH.ld,这个链接文件可以通过在STM32CubeIDE中新建一个MCU型号为STM32F103VCTx的工程并自动生成代码而获得。也可以在源码中同时保留这些文件,而在Makefile中指定调用的文件名。

当然也可以直接修改原来的链接文件:

/* Highest address of the user mode stack */
_estack = ORIGIN(RAM) + LENGTH(RAM);	/* end of "RAM" Ram type memory */

_Min_Heap_Size = 0x200 ;	/* required amount of heap  */
_Min_Stack_Size = 0x400 ;	/* required amount of stack */

/* Memories definition */
MEMORY
{
    
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 48K
  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 256K
}

主要修改的地方就在堆栈空间分配与RAM, Flash空间的定义。

修改Makefile文件

主要修改涉及到单片机型号、启动文件、链接文件等的内容:

LINK_SCRIPT = "STM32F103VCTX_FLASH.ld"

ASSEMBLER_FLAGS =-c -g -O0 -mcpu=cortex-m3  -mthumb  \
	-D"STM32F10X_HD" -D"USE_STDPERIPH_DRIVER"  -x assembler-with-cpp $(INCLUDE_DIR)
	
COMPILER_FLAGS =-c -g -MMD -mcpu=cortex-m3  -O0 -Wall \
	-ffunction-sections -fdata-sections -mthumb  \
	-D"STM32F10X_HD" -D"USE_STDPERIPH_DRIVER" $(INCLUDE_DIR) 

启动文件由于属于汇编文件,因此只要替换即可:

SRCSASM := 	$(wildcard */*/*/*/*/*/*/*/*.s) \
	$(wildcard */*/*/*/*/*/*/*.s) \
	$(wildcard */*/*/*/*/*/*.s) \
	$(wildcard */*/*/*/*/*.s) \
	$(wildcard */*/*/*/*.s) \
	$(wildcard */*/*/*.s) \
	$(wildcard */*/*.s) \
	$(wildcard */*.s)

当然,如果存在多个启动文件,可以排除不匹配的型号对应的文件:

#SRCSASM := $(filter-out Source/StdPeriLib/Startup/startup_stm32f103vctx.s, $(SRCSASM))
SRCSASM := $(filter-out Source/StdPeriLib/Startup/startup_stm32f10x_md.s, $(SRCSASM))

Alwhales库的修改

需要修改eeprom.h中关于flash划分作为eeprom的地址范围。

对于C8T6型号,flash的结束地址为“0x08010000”;
对于VCT6型号,flash的结束地址为“0x08040000”;

#if defined (STM32F10X_LD) || defined (STM32F10X_MD)
  #define PAGE_SIZE  (uint16_t)0x400  /* Page size = 1KByte */
  #define FLASH_END_ADDRESS 0x08010000

#elif defined (STM32F10X_HD) || defined (STM32F10X_CL)
  #define PAGE_SIZE  (uint16_t)0x800  /* Page size = 2KByte */
  #define FLASH_END_ADDRESS 0x08040000
#endif

/* EEPROM start address in Flash */
#define EEPROM_START_ADDRESS    ((uint32_t)(FLASH_END_ADDRESS - 2 * PAGE_SIZE))

由于已经设置好了条件编译,只需要在合适的位置(默认在stm32f10x.h中):

#define STM32F10X_HD

标准库的修改

在stm32f10x.h文件中,需要根据所使用的MCU型号,选择对应的宏定义:

/* Uncomment the line below according to the target STM32 device used in your
   application 
  */

#if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_VL) && !defined (STM32F10X_HD) && !defined (STM32F10X_HD_VL) && !defined (STM32F10X_XL) && !defined (STM32F10X_CL) 
  /* #define STM32F10X_LD */     /*!< STM32F10X_LD: STM32 Low density devices */
  /* #define STM32F10X_LD_VL */  /*!< STM32F10X_LD_VL: STM32 Low density Value Line devices */  
  /* #define STM32F10X_MD */     /*!< STM32F10X_MD: STM32 Medium density devices */
  /* #define STM32F10X_MD_VL */  /*!< STM32F10X_MD_VL: STM32 Medium density Value Line devices */  
  #define STM32F10X_HD     /*!< STM32F10X_HD: STM32 High density devices */
  /* #define STM32F10X_HD_VL */  /*!< STM32F10X_HD_VL: STM32 High density value line devices */  
  /* #define STM32F10X_XL */     /*!< STM32F10X_XL: STM32 XL-density devices */
  /* #define STM32F10X_CL */     /*!< STM32F10X_CL: STM32 Connectivity line devices */
#endif
/*  Tip: To avoid modifying this file each time you need to switch between these
        devices, you can define the device in your toolchain compiler preprocessor.

 - Low-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers
   where the Flash memory density ranges between 16 and 32 Kbytes.
 - Low-density value line devices are STM32F100xx microcontrollers where the Flash
   memory density ranges between 16 and 32 Kbytes.
 - Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers
   where the Flash memory density ranges between 64 and 128 Kbytes.
 - Medium-density value line devices are STM32F100xx microcontrollers where the 
   Flash memory density ranges between 64 and 128 Kbytes.   
 - High-density devices are STM32F101xx and STM32F103xx microcontrollers where
   the Flash memory density ranges between 256 and 512 Kbytes.
 - High-density value line devices are STM32F100xx microcontrollers where the 
   Flash memory density ranges between 256 and 512 Kbytes.   
 - XL-density devices are STM32F101xx and STM32F103xx microcontrollers where
   the Flash memory density ranges between 512 and 1024 Kbytes.
 - Connectivity line devices are STM32F105xx and STM32F107xx microcontrollers.
  */
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013441358/article/details/106771818

智能推荐

数字图像处理(第四版)-冈萨雷斯-学习过程的笔记_数字图像处理第四版-程序员宅基地

文章浏览阅读3.2k次,点赞13次,收藏91次。数字图像处理(第四版)的学习笔记,对数字图像成像过程、灰度变换和高斯等空间滤波,彩色图像模型,数学形态学处理、基本的边缘检测算法都进行了描述。_数字图像处理第四版

arcgispro制作gp工具、发布和使用GP服务_pro发布gp服务要登录吗-程序员宅基地

文章浏览阅读2.6k次。需求:在arcgispro使用modelbuilder制作包含相交、汇总统计两个工具功能的gp工具,并且将其发布到portal,并在portal上操作该gp服务效果图:模型工具:链接:https://pan.baidu.com/s/1MKSQpKZP7CVPQNWQDamAPA提取码:md6x具体实现:1、制作gp工具。1)将相交工具和汇总统计工具拖拽到mo..._pro发布gp服务要登录吗

SSMP整合综合案例_风格无涯-程序员宅基地

文章浏览阅读72次。关注itheima谢谢喵_风格无涯

As you develop your lead qualification criteria-程序员宅基地

文章浏览阅读126次。While you have on your own the Christian Louboutin replicas they enable you to definitely present the average pe...

浅谈go语言channel通道造成的死锁问题_go 线上环境 channel死锁怎么解决-程序员宅基地

文章浏览阅读581次。浅谈go语言channel通道造成的死锁问题_go 线上环境 channel死锁怎么解决

ElasticSearch文本分析(一)-程序员宅基地

文章浏览阅读682次。文章目录ElasticSearch文本分析(一)概述分词归一化自定义文本分析器概念分析器的剖析字符过滤器分词器分词过滤器索引和查询分析词干提取词干提取分词过滤器算法词干提取器词典词干提取器配置文本分析测试分析器配置内部分析其内部分析器参考指纹分析器示例输出配置配置例子定义`keyword`分析器例子输出配置定义语言分析器模式分析器例子输出配置配置实例驼峰分词器定义简单的分析器例子定义自定义标准分析器例子配置配置例子定义停用词分析器例子:配置配置例子:定义空格分析器例子配置定义ElasticSearch文本_elasticsearch文本分析

随便推点

使用Keil MDK创建STM32标准库工程_mdk stm32新建工程-程序员宅基地

文章浏览阅读684次,点赞29次,收藏35次。使用Keil创建STM32标准库工程_mdk stm32新建工程

如何在Windows下安装 python-magic_python magic 安装-程序员宅基地

文章浏览阅读3.6k次。1.下载编译安装python-magic2. a.下载 file-5.03-setup.exe http://sourceforge.net/projects/gnuwin32/files/file/5.03/b.安装到 C:\GnuWin32c.环境变量Path里添加 C:\GnuWin32\bin_python magic 安装

阿里云弹性计算通用算力型u1实例性能评测,性价比高_通用算力型 u1-程序员宅基地

文章浏览阅读1.1k次,点赞8次,收藏18次。阿里云服务器u1通用算力型Universal实例高性价比,CPU采用2.5 GHz主频的Intel Xeon Platinum 8163(Skylake)或者8269CY(Cascade Lake)处理器,CPU内存比1:1/1:2/1:4/1:8。云服务器u1适用于Web应用及网站,企业办公类应用,数据分析和计算等大多数通用的对vCPU算力和性能要求不高的应用场景。阿里云通用算力型u1云服务器。_通用算力型 u1

【打印机】argox入门_argoxprintservice-程序员宅基地

文章浏览阅读3.2k次。立象dx4300打印机调试。1 环境搭建1.1 登录http://www.argox.com.cn/Pages/servicedownload.aspx下载驱动和手册。1.2 安装正常安装即可,电脑要先接上打印机的USB口。1.3 通过USB连接打印机,打开Printer Tool工具。如果没有检测到打印机,可能是驱动安装有问题。1.4 获取打印机的参数可以看到IP..._argoxprintservice

常见的七种回归技术介绍_aenet回归-程序员宅基地

文章浏览阅读626次。本文转自:https://blog.csdn.net/wanghuan203/article/details/79329427 常见的七种回归技术&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 根据受欢迎程度,线性回归和逻辑回归经常是我们做预测模型时,且第一个学习的算法。但是如果认为回归就两个算法,就大错特错了。事实上我们有许多类型的回归方法可以去建模。每一个算法都有其重要..._aenet回归

【Vuforia外接摄像头UVC】_vuforia中uvc相机怎么设置-程序员宅基地

文章浏览阅读286次。关于Vuforia的外接摄像头设置(uvc),就是vuforia怎么设置外接摄像头,官网上提供了一个UVC 的方式,根据大佬的教程,也不能调试不出来。_vuforia中uvc相机怎么设置

推荐文章

热门文章

相关标签