以前搞過(guò)stm32開(kāi)發(fā),不過(guò)長(zhǎng)時(shí)間不搞已經(jīng)忘的差不多了,最近手頭一個(gè)項(xiàng)目要用stm32開(kāi),幾經(jīng)周折,查閱了大量的資料,博客終于搞出來(lái)個(gè)helloworld,記錄下過(guò)程,為自己也為入門(mén)的朋友們做個(gè)提醒吧!首先說(shuō)下我的環(huán)境:
編譯工具:Keil V4.10
下載工具:Flash Loader Demonstrator
固件庫(kù)版本:V3.5.0
下載方式:串口下載(沒(méi)用仿真器)
前兩個(gè)工具百度一下就行,固件庫(kù)我是從官網(wǎng)下載的,路徑如下
登錄st官網(wǎng),右上角選擇中文,然后 支持-->Tools andSoftware-->軟件-->微控制器軟件-->STM32微控制器軟件。
然后在Software Type 下勾選Firmware,在Software Version下勾選3.5.0,點(diǎn)擊篩選之后的那個(gè)選項(xiàng),并下載它(固件庫(kù)),感覺(jué)下載工具也可以在官網(wǎng)下載的,但是沒(méi)時(shí)間去摸索了,有興趣的朋友可以去找找。
有了下載工具,編譯軟件,固件庫(kù)之后,我們的任務(wù)就是通過(guò)keil生成hex文件,并通過(guò)下載工具將其下載到stm32中,下面介紹一下工程的建立規(guī)范吧。
……
算了,不介紹了,太麻煩了,我給出我當(dāng)時(shí)參考的博文吧:
http://www.cnblogs.com/emouse/archive/2012/03/01/2375146.html
參照以上文章給的步驟,就能建立起一個(gè)比較規(guī)范的工程,這里我再補(bǔ)充幾點(diǎn),
1. 啟動(dòng)文件的容量選擇上參考以下標(biāo)準(zhǔn):
小容量是16~32K
中容量是64~128K
大容量是大于256K
至于你的芯片容量是多少,請(qǐng)對(duì)照手冊(cè)自行翻譯吧:

2. 我選擇復(fù)制的第一個(gè)工程是
STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\USART\Printf
編譯過(guò)程中遇見(jiàn)一些bug,這里說(shuō)下解決辦法:
1)..\USER\main.c(24): error: #5: cannot opensource input file "stm32_eval.h": No such file or directory
關(guān)于這個(gè)bug,搜了一下,大致就是官方給的程序調(diào)用了比較高一層的封裝函數(shù),而上面博文給出的步驟顯然沒(méi)有將這個(gè)文件考慮在內(nèi),所以我們要多進(jìn)行幾步。
這個(gè)函數(shù)在 STM32F10x_StdPeriph_Lib_V3.5.0\Utilities\STM32_EVAL下,復(fù)制它到我們的工程的LIB目錄下,然后添加它的路徑到我們我們的工程中,就是鏈接博文的這一步:
然后將stm32_eval.c添加到我們工程的User目錄下
編譯后,發(fā)現(xiàn)錯(cuò)誤變成了這樣:
..\LIB\Utilities\STM32_EVAL\stm32_eval.h(169): error: #35: #errordirective: "Please select first theSTM32 EVAL board to be used (instm32_eval.h)"
..\LIB\Utilities\STM32_EVAL\stm32_eval.h: #error "Please selectfirst the STM32 EVAL board to beused (in stm32_eval.h)"
關(guān)于這個(gè)錯(cuò)誤,請(qǐng)大家打開(kāi)stm32_eval.h,中間有下面這樣一段話:
#if !defined (USE_STM32100B_EVAL) && !defined(USE_STM3210B_EVAL) && !defined(USE_STM3210E_EVAL)\
&& !defined (USE_STM3210C_EVAL)&& !defined (USE_STM32L152_EVAL)&& !defined(USE_STM32100E_EVAL)
//#define USE_STM32100B_EVAL
//#define USE_STM3210B_EVAL
//#define USE_STM3210E_EVAL
//#define USE_STM3210C_EVAL
//#define USE_STM32L152_EVAL
//#define USE_STM32100E_EVAL
#endif
這段話,我猜測(cè)是根據(jù)STM32不同的官方樣品板,上層的封裝函數(shù)可能有不同,故設(shè)計(jì)一個(gè)宏定義來(lái)進(jìn)行配置,對(duì),應(yīng)該就是這樣……
假如誰(shuí)用的是官方樣品板子的話,就根據(jù)自己的型號(hào)進(jìn)行宏定義,我是自己畫(huà)的板子,所以隨便選嘍!就以
USE_STM32100E_EVAL為例進(jìn)行宏定義。
第一種方法,你可以把自己型號(hào)前的那個(gè)注釋個(gè)去掉。
第二種方法,在keil中配置宏定義,如下
顯然,第二種方法比較高大上一些,也利于管理,推薦給大家。
再次編譯,通過(guò)了。
然后就是下載了。
插上板子,啟動(dòng)模式調(diào)成 boot0 :1 boot1:0
上電,打開(kāi)下載工具,選擇串口號(hào),一路默認(rèn),選擇hex文件,下載。
斷電,啟動(dòng)模式調(diào)成 boot0:0 boot1:0
上電,成功運(yùn)行(希望如此吧)。
對(duì)了,鏈接所給的那個(gè)博文有幾個(gè)地方在稍微提醒一下:
由于我們使用的是串口下載,故這個(gè)地方我們就選擇默認(rèn)的左側(cè)的那個(gè)紅圈。
還有
宏定義之間使用英文的","分開(kāi),剛開(kāi)始我還以為是空格那。
對(duì)了還有最重要一點(diǎn):
圖中的那個(gè)Use MicroLIB一定要勾選上,一定要勾選上,一定要勾選上,重要的事情說(shuō)三遍!
寫(xiě)這篇文章的時(shí)候,我同步創(chuàng)建了一個(gè)新工程,應(yīng)該沒(méi)有問(wèn)題了。 恩,就這樣了,希望有幫助到人。
|