Ubuntu下搭建stm32+stlink的開發環境
熱度 3已有 15960 次閱讀2014-8-19 21:09
|
上周因為忙于别的事情,很久沒切到ubuntu下了,這周繼續弄了弄。
弄到了一些眉目,決定先簡單寫個總結。
我不打算采用 詳細文檔 的寫法,而采取一種啟發性的思路。因為中間很多操作,我們可以自己百度或者,假如你熟悉這些指令,操作。
首先,講述一下要實作的功能。
在Windows下,有好幾款ARM stm32的開發工具,比如我個人最喜歡的IAR,更加著名的MDK。
首先我們要搞清楚一些基礎概念,IAR,MDK是IDE,也就是 內建開發環境,所謂內建因為它包含了很多工具,其中最主要的是 編譯器,調試器,下載下傳工具 等等,所有這些,組成一個完整的工具鍊,可以供我們 在單片機上開發項目。
也就是說,原則上來說,隻要我們擷取了這一系列工具,并且互相配合起來,組成一條完整的工具鍊——或者足夠的工具鍊,我們就可以自行組建自己的開發環境,而無須受制于 軟體的license,運作環境等各種限制條件。
IAR MDK都沒有Linux的版本。
但是在Linux下,我們可以使用一些分散的替代工具。
其中,C編譯器是 大名鼎鼎的 GNU C,調試器是GDB,至于下載下傳工具,由于本人偏好使用STLINK SWD,是以,經過一番搜尋和了解,我選擇使用 stlink-master,此外,為了進行硬體調試,除了主控端上需要gdb外,還需要一個裝在晶片上的 遠端gdbserver。
經過一番折騰。
目前,我已經完成的工作有:
1.我從 Sourcery g++ Lite擷取了一個相當新的 GCC編譯工具;其中包含gcc g++ gdb;
當時我這麼做是因為我不懂得設定和重新編譯gcc工具鍊,因為事實上,4.4以後的版本,官方版本已經加入了對cortex m0 m3的支援——而這兩個也是我所需要的。也就是說,如果我能學會編譯,我以後大可自己重新做一個,但無論如何,至少現在為止,我們可以擁有一個 gcc交叉工具鍊;
2.在編譯的時候,我發現,它需要指定 編譯腳本 ld檔案,讓編譯器了解具體晶片的一些基本資訊:比如 存儲器的配置設定和中斷入口 ,堆棧的設定;
這一塊,我還不會寫,是以我打算想辦法去找例子學着寫;
3.在第二步卡住的時候,我覺得,這一步最終需要實際燒錄程式才能驗證是否可行,于是我決定再往前走,先把stlink的驅動搞定。慢慢的,我發現,當我把stlink-master搞定的時候,我發現,我同時擁有了我以為還得費勁的gdbserver。
目前的進展是,我已經擁有了gcc工具鍊 和 stlink驅動及相應燒錄,調試工具。
下一步我需要學會或者找到一個m0的 連接配接腳本。
(具體的過程,我會在完成之後,詳細整理出來。)
在這以前,還有一點要提醒。
Linux下設定 環境變量,沒有windows那麼友善,可以在 桌面右鍵屬性的 進階 裡 設定。目前我隻知道通過export PATH指令完成。但有個比較麻煩的地方是,直接這麼export,在下次重新開機後,這變量就沒了。
當然還有很多人喜歡另一種辦法,那就是把相應的bin放到 系統的/usr/bin下,但這種行為無異于在windows下,把所有軟體裝在c盤,這種事,老子不幹。而且我曾經接觸過這個問題,我記得是可以通過直接寫什麼檔案,把這個環境變量固定下來,現在我首先要解決這個事情。
然後再去想腳本,這裡,給大家推薦一個很不錯的 第三方徹底開源工具。 libopencm3,它其實同時包含了cm0 cm0+ cm3 cm4 cm1,并且不止stm32,還包含ti部分,nxp部分mcu 的工具鍊。
不過既然我已經裝好了工具鍊,我也就不打算重新換他的,我隻想學會或者獲得m0的連接配接腳本,此外,它使用的是openhcd來做stlink的驅動架構,我暫時對這個不夠了解,但我怕它不穩定,是以相對來說我還是打算選擇stlink-master,它似乎更加“官方”——這是一個動态的過程,玩Linux的都是熱愛自由,不怕折騰的人,我會持續關注這些事情,盡可能改善自己的開發環境。
好了,今晚的筆記到此結束~~