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

原文:https://blog.csdn.net/xiuhua_wu/article/details/85237418
背景
前几天有个新需求,使用 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.依据芯片容量输入对应的宏条件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python手写神经网络实现3层感知机

一、BP神经网络结构模型 BP算法的基本思想是,学习过程由信号的正向传播和误差的反向传播俩个过程组成,输入从输入层输入,经隐层处理以后,传向输出层。如果输出层的实际输出和期望输出不符合,就进入误差的反向传…

JVM(四)垃圾回收的实现算法和执行细节

全文共 1890 个字,读完大约需要 6 分钟。 上一篇我们讲了垃圾标记的一些实现细节和经典算法,而本文将系统的讲解一下垃圾回收的经典算法,和Hotspot虚拟机执行垃圾回收的一些实现细节,比如安全点和安全区域等。 因为各个平台的虚拟…

python-cx_oracle报错“DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded: “

问题的主要原因是python-cx_oracle加载的是32位的instantclient-basic,我们需要让他读到64位的。 弄清版本,最重要!!! 首先安装配置时,必须把握一个点,就是版本一致!包括&#xff1…

JVM(五)垃圾回收器的前世今生

全文共 2195 个字,读完大约需要 8 分钟。 如果垃圾回收的算法属于内存回收的方法论的话,那本文讨论的垃圾回收器就属于内存回收的具体实现。 因为不同的厂商(IBM、Oracle),实现的垃圾回收器各不相同,而本文…

【SlowFast复现】SlowFast Networks for Video Recognition复现代码 使用自己的视频进行demo检测

目录 一,准备 1.1代码1.2 环境准备1.3 搭建镜像1.4 配置slowfast环境1.5 ava.json1.6 SLOWFAST_32x2_R101_50_50.yaml1.7 SLOWFAST_32x2_R101_50_50 .pkl二,代码运行三 错误解决复现过程视频:B站复现视频复现结果 一,准备 1.1代…

MySQL学生向笔记以及使用过程问题记录(内含8.0.34安装教程

MySQL 只会写代码 基本码农 要学好数据库,操作系统,数据结构与算法 不错的程序员 离散数学、数字电路、体系结构、编译原理。实战经验, 高级程序员 去IOE:去掉IBM的小型机、Oracle数据库、EMC存储设备,代之以自己在开源…

程序员专属精品简历合集—面试必备

听说你最近打算换工作?听说你和好工作之间,只差一个漂亮的简历模板?人们常说“金三银四”,一年之际在于春。不管你是主动离职,还是被动“被离职”(稳住,我们能赢!)&#…

ubuntu20.10下wine安装微信

1.unbuntu20.04下安装wine sudo apt-get install wine2.微信官网http://short.weixin.qq.com/下载window系统微信软件 3.在wine中安装微信 在WeChatSetup.exe文件中打开终端输入: wine WeChatSetup.exe

【faster rcnn 实现via的自动框人】使用detectron2中faster rcnn 算法生成人的坐标,将坐标导入via(VGG Image Annotator)中,实现自动框选出人的区域

前言 B站讲解视频 我的研究生毕业论文方向就是时空行为检测,所以,slowfast和ava是我重点搞的,我的博客主页也有很多这些相关内容。 终于,到了标注数据这一块了,为了更简单的标注数据,我要做的这部分的数据…

程序员精美简历Top榜—面试必备

听说你最近打算换工作?听说你和好工作之间,只差一个漂亮的简历模板? 不管是主动离职,还是“被离职”(稳住,我们能赢!),趁着大好时光和对新年的憧憬,再找一个…

失败创业者的告白:初创团队应有一位绝对领导者

做了两年的项目失败了,我们的项目做的是数码3C的优惠信息,我是一个80后,小硕一枚;我们的1号创始人是90后,有激情、有梦想;在十八岁那年带上他的梦想千里北上,找我们的开复老师指点一二;但那时,开复老师正为…

【ffmpeg裁剪视频faster rcnn自动检测 via】全自动实现ffmpeg将视频切割为图片帧,再使用faster rcnn将图片中的人检测出来,最后将检测结果转化为via可识别的csv格式

目录 前言一,ffmpeg 自动裁剪 1.1 目录结构1.2 cutVideoToImage.sh1.2 myVideo1.3 myVideo15mins1.5 myFrames1.6 运行1.7 查看结果二,detectron2中的faster rcnn检测 2.1 img2.2 myvia.py2.3 运行2.4 结果展示三,via标注 3.1 csv文件修改&am…

ubuntu20.10(Linux)在wine下用pyinstaller打包python程序在window系统运行 交叉编译

1.安装wine 在终端中输入: sudo apt-get install wine2.安装pip 在https://pypi.org/project/pip/#files下载pip-21.0.tar.gz,在压缩包上右键提取到此处,打开解压的文件夹pip-21.0 在该文件夹中打开终端安装pip-21.0.tar.gz: wi…

JVM(六)为什么新生代有两个Survivor分区?

本文会使用排除法的手段,来讲解新生代的区域划分,从而让读者能够更清晰的理解分代回收器的原理,在开始之前我们先来整体认识一下分代收集器。 分代收集器会把内存空间分为:老生代和新生代两个区域,而新生代又会分为&a…

【slowfast复现 训练】训练过程 制作ava数据集 复现 SlowFast Networks for Video Recognition 训练 train

目录 前言一,ava相关文件准备 1.1 空间准备(500G)1.2 整体ava文件结构1.3 frames文件1.4 frame_lists 文件1.5 annotations 文件二,预训练模型三,配置文件 3.1 创建新的yaml文件3.2 yaml文件解释四,训练前言…

Qt6 在线安装图文步骤

说明: Qt 自从5.15版本开始,对非商业版本,也就是开源版本,不提供已经制作好的离线exe安装包,自这个版本开始你只有两种选择: 1、编译源码 例如qt-everywhere-src-5.15.2.zip 编译步骤繁琐,需严…

【slowfast 减少ava数据集】将ava数据集缩小到2个,对数据集做训练,然后进行检测,为训练自己的数据集做准备

目录 前言一,数据文件结构 1.1 myava1.2 annotations1.3 annotations文件处理1.4 frame_lists1.5 frames二,预训练模型四,配置文件 4.1 创建新的yaml文件4.2 yaml文件解释五,训练六,结果查看前言 b站讲解 ava的数据集…

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。

2019独角兽企业重金招聘Python工程师标准>>> 首先必须明一点 Field类主要是用来辅助获取和操作类的属性的! 1.怎么通过反射获取类的属性 先来看JDK提供的方法有如下几种: a)Class.getDeclaredField(String name); 返回一个 Field 对象&#x…

Python3自带HTTP文件传输服务(局域网文件共享)

一行命令搭建一个基于python3的http文件传输服务 WIN10系统下,打开打算要分享传输的文件夹(文件夹内存放分享的文件,建议以压缩包形式存放),shift鼠标右键,出现如下图,选择“在此处打开Powershe…

90% 的人都会答错的面试题 == 和 equals 的区别

和 equals 的区别是什么? 解读对于基本类型和引用类型, 的作用效果是不同的,如下所示:基本类型:比较的是值是否相同;引用类型:比较的是引用是否相同;代码示例:String x …