【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 。那這些條件在哪里定義的呢?
它們的定義來自 Option 中的 C/C++的 Define 里,只要咱按容量輸入對應的宏,再編譯,是不是就沒有問題了呢~~~
總結
1.依據芯片容量選擇對應的啟動文件
2.依據芯片容量輸入對應的宏條件
總結
以上是生活随笔為你收集整理的【STM32】修改芯片型号后报 Error 的解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NVIDIA Jetson Nano B
- 下一篇: 舵机驱动