【STM32】修改芯片型号后报 Error 的解决方案
原文:https://blog.csdn.net/xiuhua_wu/article/details/85237418
背景
前幾天有個(gè)新需求,使用 STM32 的標(biāo)準(zhǔn)庫(kù)(STD)做個(gè)產(chǎn)品的例程。之前已經(jīng)做了個(gè) HAL 的,但人家客戶不干,非要 STD 的。拖了一周,想起來了,今天就開始做,但是懶啊,直接在網(wǎng)上找了個(gè)封裝好了的 STD 例程,想直接修修改改,就完事了。
沒想到,例程的芯片型號(hào)(STM32F103VC)和我手上的開發(fā)板(STM32F103C8)不一樣,雖然說是都是 STM32F10x 系列,如果要直接在 Keil 上直接調(diào)試程序,還是需要把型號(hào)選成一樣的。沒想到在 “Options” 的 Device 把芯片信號(hào)選對(duì)了之后,就報(bào)了一堆的庫(kù)錯(cuò)誤,如下圖所示:
其實(shí)這種錯(cuò)誤,在以前的時(shí)候就有遇到過,當(dāng)時(shí)直接就重新下載個(gè)一樣的芯片型號(hào)的例程,直接把問題規(guī)避了。老姐長(zhǎng)大了,該解決問題了,然后就想了想、查了查。果然,我果然長(zhǎng)大了,能解決問題了。
本文就是記錄如果解決此問題。
啟動(dòng)文件
咱們先從啟動(dòng)文件《startup_stm32f10x_XX.s》說起。
在工程目錄中的 “CMSIS\startup” 文件中有好幾個(gè)啟動(dòng)文件。不同 Flash 容量的芯片型號(hào)選擇不同的啟動(dòng)文件,否則會(huì)報(bào)上述的錯(cuò)誤。
具體怎么根據(jù)芯片容量選呢?
咱們來看看~~~下圖是摘至 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 個(gè) Flash 容量等級(jí):
Low-density :16KB 、32KB Flash
Medium-density :64KB、128KB Flash
High-density : 256KB、384KB 、512KB
Attention:這里只是針對(duì) STM32F103 而言的。
咱們知道了芯片的 Flash 容量等級(jí)劃分,咱們?cè)倩剡^頭來看看,怎么依據(jù)容量等級(jí)去選擇芯片:
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:這里只是針對(duì) STM32F103 而言的。
那倒這里,咱們就可以嘗試著把啟動(dòng)文件加入到工程中,再編譯下。
是不是有的童鞋的工程還在報(bào)錯(cuò)呢?
從報(bào)錯(cuò)信息里面可以發(fā)現(xiàn),報(bào)錯(cuò)信息都是來自《stm32f10x.h》部分的 Interrupt Number 部分。那咱們來看看這部分有什么特殊?
在 typedef enum IRQn 枚舉類型中出現(xiàn)了以下幾個(gè)條件編譯語(yǔ)句,這幾個(gè)條件編譯語(yǔ)句決定了Interrupt Number 。那這些條件在哪里定義的呢?
它們的定義來自 Option 中的 C/C++的 Define 里,只要咱按容量輸入對(duì)應(yīng)的宏,再編譯,是不是就沒有問題了呢~~~
總結(jié)
1.依據(jù)芯片容量選擇對(duì)應(yīng)的啟動(dòng)文件
2.依據(jù)芯片容量輸入對(duì)應(yīng)的宏條件
總結(jié)
以上是生活随笔為你收集整理的【STM32】修改芯片型号后报 Error 的解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NVIDIA Jetson Nano B
- 下一篇: 舵机驱动