【STM32】修改芯片型号后报 Error 的解决方案

背景

前几天有个新需求,使用 STM32 的标准库(STD)做个产品的例程。之前已经做了个 HAL 的,但人家客户不干,非要 STD 的。拖了一周,想起来了,今天就开始做,但是懒啊,直接在网上找了个封装好了的 STD 例程,想直接修修改改,就完事了。
没想到,例程的芯片型号(STM32F103VC)和我手上的开发板(STM32F103C8)不一样,虽然说是都是 STM32F10x 系列,如果要直接在 Keil 上直接调试程序,还是需要把型号选成一样的。没想到在 “Options” 的 Device 把芯片信号选对了之后,就报了一堆的库错误,如下图所示:
在这里插入图片描述
其实这种错误,在以前的时候就有遇到过,当时直接就重新下载个一样的芯片型号的例程,直接把问题规避了。老姐长大了,该解决问题了,然后就想了想、查了查。果然,我果然长大了,能解决问题了。
本文就是记录如果解决此问题。

启动文件

咱们先从启动文件《startup_stm32f10x_XX.s》说起。
在工程目录中的 “CMSIS\startup” 文件中有好几个启动文件。不同 Flash 容量的芯片型号选择不同的启动文件,否则会报上述的错误。
在这里插入图片描述
具体怎么根据芯片容量选呢?
咱们来看看~~~下图是摘至 STM32F103C8T6 官方的 Product Specifications 文档《DS5319: Medium-density performance line ARM®-based 32-bit MCU with 64 or 128 KB Flash, USB, CAN, 7 timers, 2 ADCs, 9 com. interfaces》,这里面就列出了 3 个 Flash 容量等级:

  • Low-density :16KB 、32KB Flash
  • Medium-density :64KB、128KB Flash
  • High-density : 256KB、384KB 、512KB

Attention:这里只是针对 STM32F103 而言的。
在这里插入图片描述

咱们知道了芯片的 Flash 容量等级划分,咱们再回过头来看看,怎么依据容量等级去选择芯片:

  • Low-density :16KB 、32KB Flash 选择 startup_stm32f10x_ld.s 或 startup_stm32f10x_ld_vl.s
  • Medium-density :64KB、128KB Flash 选择 startup_stm32f10x_md.s 或 startup_stm32f10x_md_vl.s
  • High-density : 256KB、384KB 、512KB 选择 startup_stm32f10x_hd.s 或 startup_stm32f10x_hd_vl.s

Attention:这里只是针对 STM32F103 而言的。

那倒这里,咱们就可以尝试着把启动文件加入到工程中,再编译下。
是不是有的童鞋的工程还在报错呢?
从报错信息里面可以发现,报错信息都是来自《stm32f10x.h》部分的 Interrupt Number 部分。那咱们来看看这部分有什么特殊?
typedef enum IRQn 枚举类型中出现了以下几个条件编译语句,这几个条件编译语句决定了Interrupt Number 。那这些条件在哪里定义的呢?

#ifdef STM32F10X_LD
 ......
#endif /* STM32F10X_LD */ 

#ifdef STM32F10X_LD_VL
.......
#endif /* STM32F10X_LD_VL */

#ifdef STM32F10X_MD
.......
#endif /* STM32F10X_MD */  

#ifdef STM32F10X_MD_VL
......
#endif /* STM32F10X_MD_VL */

#ifdef STM32F10X_HD
......
#endif /* STM32F10X_HD */  

#ifdef STM32F10X_HD_VL
......
#endif /* STM32F10X_HD_VL */

#ifdef STM32F10X_XL
......
#endif /* STM32F10X_XL */  

#ifdef STM32F10X_CL
#endif /* STM32F10X_CL */   

它们的定义来自 Option 中的 C/C++的 Define 里,只要咱按容量输入对应的宏,再编译,是不是就没有问题了呢~~~
在这里插入图片描述

总结

1.依据芯片容量选择对应的启动文件
2.依据芯片容量输入对应的宏条件

在这里插入图片描述

  • 18
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值