編寫STM32專案遇到的報錯

2021-09-07 14:11:47 字數 1736 閱讀 8554

1.undefined symbol systeminit(未定義符號systeminit)

新建專案並編譯後遇到以下的錯誤:

..\output\led.axf: error: l6218e: undefined symbol systeminit (referred from startup_stm32f429_439xx.o).

錯誤分析:從括號裡面的內容可以知道:這個錯誤在 startup_stm32f0xx.o 這個檔案裡面被提及到,所以我們只需要在工程裡面找到對應的.s或者.c檔案即可(此錯誤對應的檔案為startup_stm32f429_439xx.s)。

這個檔案是stm32的啟動檔案,在此檔案中可以找到systeminit所在:

此時可以發現:在startup_stm32f429_439xx.s檔案中,呼叫了systeminit這個函式,而這個函式在.s檔案裡面沒有定義。 

解決方法:

(1)在工程專案當中任意乙個.c檔案中加入systeminit函式的定義,空函式即可。

void systeminit()

(2)注釋呼叫的**段。注意這是匯程式設計序,注釋用 「;」systeminit 是在使用main前做一些初始化工作,如果不需要官方的庫,只是自己編寫一些簡單的應用,則可以把此函式禁掉。

reset_handler   proc

export reset_handler [weak]

import __main

; import systeminit

; ldr r0, =systeminit

; blx r0

ldr r0, =__main

bx r0

endp

2.no such file or directory(沒有這樣的檔案或目錄)

在編譯過程中遇到以下的錯誤:

d:\keil_v5\arm\pack\keil\stm32f1xx_dfp\2.2.0\device\include\stm32f10x.h(483): error:  #5: cannot open source input file "core_cm3.h": no such file or directory

..\user\stm32f10x_it.c(26): error:  #5: cannot open source input file "usart.h": no such file or directory

錯誤分析:這些錯誤是由於在工程裡沒有包含這些檔案(換個說法就是在工程路徑裡找不到這些檔案),所以解決這些錯誤的做法是把這些檔案所在的路徑包含進來。

解決方法:

在keil軟體中:選擇「花棒」--「c/c++」,按照下圖操作將檔案所在路徑包含到專案裡,重新編譯

隨筆 STM32的C語言編寫遇到的問題1

問題1.在進行kile的debug時,程式停在了ldr r0,systeminit這裡不動了。原因 debug的斷點設定的太多了 問題2 c語言裡,函式的輸入引數是不能被改變的。意思是說,加入我在函式內部,對某輸入引數進行了處理,在離開函式後,該處理便會失效。解決方法 傳遞的引數為指標。問題3 結構...

STM32學習 ROV遇到的坑

1 usart 1.使能串列埠前必須清除tc位,否則後面多路採集adc時就涼了。usart clearflag usart2,usart flag tc usart cmd usart2,enable 使能串列埠22.查詢等待方式傳送資料時需要先清tc,否則會丟失第乙個資料 void send bu...

STM32 虛擬串列埠遇到的問題

目標 移植正點原子stm32f103zet6串列埠程式到stm32f103c8t6 問題1 程式執行到usb初始化,卡住 原因 hw config中使用printf函式,由於沒有初始化 串列埠1,導致卡住。解決方法 1.初始化串列埠1 2.注釋hw config中所有printf 問題2 未知usb...