dede如何制作网站地图,手机ps抠图软件下载,wordpress分类链接地址,北海做网站原文#xff1a;https://blog.csdn.net/xiuhua_wu/article/details/85237418 背景 前几天有个新需求#xff0c;使用 STM32 的标准库#xff08;STD#xff09;做个产品的例程。之前已经做了个 HAL 的#xff0c;但人家客户不干#xff0c;非要 STD 的。拖了一周#xf…原文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.依据芯片容量输入对应的宏条件