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...