2017.12.17 下午
終於在不用keil5自帶添加庫的基礎上0 error的新建了一個工程。磕磕絆絆搞了快一個下午,各種小問題搞到崩潰。
首先是庫文件添加路徑的問題 ,只要是你工程中用到的頭文件,都需要在工程選項配置中添加相應的路徑,另外,通過一個下午的掙扎,發現最好還是在學習的過程中逐漸構建自己的代碼庫,最好自己添加需要的庫文件,這樣便於程序的移植。也便於熟悉各種啟動文件。
另外一定要注意程序中不能有漢語輸入。
千萬不要有漢語輸入!千萬不要有漢語輸入!千萬不要有漢語輸入!
一開始我一直以為是keil壞了,誰知道最后還是發現是自己的錯。所以一定要細心。跟着他提示的錯誤代碼行去找,記住,一定要細心。不要老是懷疑別人。一點點漢語輸入的空格導致我浪費了兩個小時的時間。
找到這行,通常是里面的某個參數或者變量不符合格式。找個 里面的變量 ,把一行全部刪除,然后切換英文輸入,注意半角英文,如果還是不對的話,那就是你的keil壞了。
總結的合理的文件結構(養成自己的代碼風格):
USERS文件:
存放自己編輯的源文件和頭文件。工程中包含自己的源文件,路徑中包含頭文件。另外,在USERS中,最好在包含it.c and conf.h。
it中寫中斷函數,conf中釋放自己需要的固件庫頭文件,屏蔽自己不需要的頭文件。也就是說你在lib文件夾中包含了什么固件庫,就需要在這里釋放什么頭文件。這和我們平時編寫頭文件和源文件的思路一樣呀,一個頭文件總是跟着一個源文件。
CMSIS文件:
中存放工程都必須的啟動代碼,core_cm3.c / system_stm32f10x.c / startup_stm32f10x_hd.s
LIB文件:
中存放程序用到固件庫的源程序,同時注意包含misc.c文件。
另外,不要忘了在C++選項卡中寫入USE_STDPERIPH_DRIVER,寫下這句話就意味着在stm32f10x.c中包含了conf.h頭文件,(具體原理點這里)不然需要自己在文件中包含這個頭文件,有點麻煩。
上面 提到的幾個文件的作用
1、core_cm3.c文件
在CoreSupport文件夾中有core_cm3.c和頭文件core_cm3.h,它的作用是采用Cortex-M3內核設計的SoC芯片廠商設計的芯片提供了一個進入CM3內核的接口。core_cm3.c中還有一些與編譯器(MDK、IAR等)有關的代碼。較重要的是core_cm3.c中包含stdio.h頭文件,這是一個ANSI C文件,主要作用是提供一些新類型的定義。
2、system_stm32f10x.c文件
DeviceSupport文件夾下是啟動文件、外設寄存器定義、中斷向量定義層的一些文件,這些文件由ST公司提供。system_stm32f10x.c的主要作用是設置系統時鍾和總線時鍾。
3、stm32f10x.h文件
這個文件非常重要,是非常底層的文件,包含了寄存器地址和結構體類型的定義,在使用到stm32固件庫的地方都要包含它。
3、stm32f10x_it.c和stm32f10x_conf.h文件
stm32f10x_it.c這個文件主要是編寫中斷程序的,stm32f10x_conf.h被包含在stm32f10x.h文件中主要是配置外設的頭文件,我們需要什么在這里打開。
4、startup_stm32f10x_hd.s文件
在這個文件中有一段啟動文件,啟動文件中先初始化系統時鍾,然后才執行主函數,因此我們要注意配置時鍾在這個文件里配置。
基本上上面這些就能夠完整的編譯一個keil5的工程了。
5、關於misc.c文件:
STM32 V3.5版本的庫函數中沒有原來版本中單獨對於NVIC(中斷向量嵌套)的外設驅動,把NVIC的外設驅動放在了misc.c中,實際上是代替原來的stm32f10x_nvic.c.