文章轉自armfly開發板V4軟件開發手冊,分享學習~
今天有幸看到armfly的開發板軟件開發手冊,開頭的基礎知識,真的很有用,還好有看到,一切都不遲,感悟很多,摘抄部分,學習分享~
關於開發環境的搭建
(個人認為,好用的工具,順手的開發環境,對於編程是一種好的習慣,也是一種好的享受,所以,在環境搭建方面,我還是比較在意軟件的互相聯合使用,工程建立的規范化等等,這樣可以盡量少的在后期更換不同的環境,變軟會很浪費時間,一次到位,一路順風順水~)
個人偏好的環境搭建:
集成開發環境(IDE):Keil公司的RealView MDK
源文件編輯器:UltraEdit/SourceInsight/IDE自帶的編輯器
串口工具:SecureCRT(一個專業的超級終端工具,支持很多接口(包括串口)和協議,推薦使用。)
RealView MDK 工程配置:
(這里很有必要去熟悉下)
1.“ Device”選項。選擇正確的CPU型號。 選擇STM32F103ZE。
2.“ Target”選項。勾選” Use MicroLIB” 。 如果不選,printf函數將無法輸出信息到串口。
3.“ Output”選項。可修改可執行文件名。勾選“ Create HEX File” ,表示生成可單獨燒寫的Hex文件。
取消 “ Browse Information”選項可以大大加快每個文件的編譯速度,但將喪失鼠標右鍵定位函數和宏的功能。 這個選項不影響最終的Hex。
在編譯過程中,會生成大量的obj臨時文件,你可以通過“ Select Folder for Objects”按鈕指定Obj
文件的存放目錄。這樣將是工程文件目錄變得非常簡潔。
4.“ Listing”選項。在編譯過程中,會生成大量的lst臨時文件,你可以通過“ Select Folder for Listings”按鈕指定lst文件的存放目錄。這樣將是工程文件目錄變得非常簡潔。
5.“ User”選項。可以指定編譯之前和編譯之后執行的用戶程序。
為了將編譯生成的Hex文件復制到指定目錄並更名保存,我們可以在編譯后執行一個bat批處理文件。
CopyHex_Flash.bat 文件是一個文本文件,內容如下:
copy Flash\Obj\output.hex ..\output(mdk).hex
6.“ C/C++”選項。此處“ USE_STDPERIPH_DRIVER”表示使用ST的固件庫;如果有其他的預編譯宏,可以用逗號分割。
Include Path 指定頭文件的路搜索路徑
添加 --diag_suppress=870 控制,可以避免中文字符串告警
7.“ Asm”選項。無需更改。
8.“ Linker”選項。無需更改。
9.“ Linker”選項。無需更改。
點擊” Settings”按鈕設置硬件仿真器,請選擇對應的仿真器型號。我們的例程缺省都配置的是J-Link
仿真器。
勾選“ Run to main()”可以在啟動Debug時,執行到main()函數暫停。
10.“ Utilities”選項。
擊” Settings” 按鈕設置硬件仿真器,請選擇對應的仿真器型號。我們的例程缺省都配置的是J-Link
仿真器。點擊” Add” 按鈕,添加Flash編程算法。選擇STM32F10x High-density Flash。
/*****以上的設置是編程的前提,一定要注意,否則到時候出現不知名的錯誤就摸不着頭腦了。*****/
關於STM32學習的一些觀點
(仁者見仁,智者見智)
堅定信念選擇ST固件庫
不要再思考固件庫開發還是寄存器開發這種問題了。 99%的有實際產品開發經驗的工程師都會告訴
你,使用ST的固件庫開發STM32應用是最佳的選擇。這套固件庫寫的非常規范,很嚴謹,沒有一定的C語
言功底和程序架構設計功底是寫不出來這種代碼的。你如果覺得固件庫過於復雜,太亂了,只能說明一個
問題:你沒有參與過大型軟件開發、你的C語言還沒學習到位、你還沒有程序架構設計的概念。
我們要做的是學會如何看懂固件庫、學習如何使用固件庫。 深入的話可以借鑒固件庫的寫法構建我們
自己的外設驅動。
可能有些人會反駁,不學習寄存器,感覺學習地不深入。我的觀點是:寄存器是最沒有學習價值的,
硬件功能復雜了必須通過一些寄存器的某些bit來配置和選擇硬件功能。我們需要大量的時間來記憶、梳理
寄存器每個bit之間的關系。我認為是不值得的。你不如將這個時間花在學習ST固件庫是如何梳理、歸納
這些硬件功能,也就是學習C程序設計方法。
我們也不是完全讓你不去了解寄存器功能,在極個別時候,我們也會使用寄存器直接操作。不過我們
也就是將ST固件庫的函數展開以提高代碼執行效率。
選擇性學習
(這個可能適合很多上進心很強的童鞋,總想把STM32搞精搞透,甚至不只是單片機,FPGA等等等等的技術,人生苦短,抓住精華,盡力而為!)
STM32的功能實在太多,和STM32相關的軟件組件也多如牛毛。而人的精力是有限,你就算學習一輩子,也不可能學會所有的東西。人的一生,時間是最為寶貴的,我們一定要將時間用在刀刃上。別人做好的開源的第三方的代碼,如果你測試應用過,沒有問題,那他就屬於你的了,你只要學會怎么移植和使用它就足夠了。如果別人已經移植好了,那就更方便了,直接拿來使用即可。沒有必要再花精力深入代碼去研究別人的程序結構了。比如FatFS、 uIP、 ST固件庫、 uCOS、 emWin。除非你是做基礎研究或者查找BUG。
我們一定要將時間騰出來去學習和掌握更多的軟件模塊。這樣,當項目來臨時,你就可以從容應對。
構建自己的代碼庫
(根據自己的代碼風格,以及常用的模塊,建立自己的小代碼庫,這樣以后用到的時候,直接拿來改一改,自己的東西自己心里清楚,用着明了,心里也踏實,也利於項目的快速啟動和建立)
自己驗證過的代碼,要學會收集整理。變為自己代碼庫的一部分。日積月累。等到做產品和項目時,80%以上的代碼來自於代碼庫。做產品很多時候就是搭積木。你的代碼庫越豐富,做起產品來也就越快越好。一些好的工程框架也要學會收集整理。我們在很多時候做項目,都是直接復制某個相近的工程。不可能每次都去重新新建一個工程。好比蓋房子,你可以直接拿磚砌,而不用在花時間去造轉。
/*****以上觀點僅供參考,開發板的團隊根據自己的開發經驗和體會得出的建議,也是我比較同意的觀點*****/
授之於魚,不如授之於漁
查詢下載資料請直接訪問ST的官方網站:
http://www.st.com
另外一個非常好的中文網站是:
http://www.stmcu.org
參考手冊(Reference Manual) 【內容很全面,軟件工程師必須閱讀】
數據手冊(Data Sheet) 【硬件工程師必須閱讀】
勘誤手冊(Errata Sheet)
描述了芯片某些功能的局限性,並給出解決辦法。這個手冊也比較重要,有時候我們
我們覺得有些地方調試老是出問題的時候,就需要查找一下了,看看是否給出了解決方案。
閃存編程手冊(Flash Programming Manual)
對芯片片上閃存的操作指南、讀寫保護設置,選項字節信息
內核編程手冊(Cortex-M Programming Manual)
對內核的系統控制塊寄存器的描述。這個手冊有的時候也要用到,比如我們需要了解 NVIC 和
SysTick 相關的寄存器,就需要使用這個手冊,這個手冊可以在 ARM 官方網站下載,也可以到
ST 官網下載,區別就是 ARM 方法的是通用的,ST 發的是針對自己的芯片做的,有時候在參考
手冊上面找不到相關寄存器的信息時,就需要這個手冊。