2012年6月21日 星期四

在 Linux 上編譯 stm32 library for stm32f10x

本文在 2012/06/21 20:19 發表於 Yahoo!奇摩部落格
因Yahoo!奇摩部落格將於2013年12月26日終止服務故遷移至此


這篇文是庫存出清XD
STM32 這塊板子買來很久了, 原案是為了圓當兵時的理想 : 退伍計時器
不過現在有更有興趣的東西 : Android
這東西只好一直拖拖拖, 拖到忘了XD 直到有人提起才再拖出來
不過釋放完庫存, 它又要被塞回倉庫睡覺了XD
STM32 能力很不錯, 不過目前手邊沒有非它不可的應用
跑圖形, 連 OMAP3 都可以做手錶這種小螢幕, 而且也蠻省電的
跑控制, AVR 就可以衝得呯呯叫, 而且一顆只要 50 元, 還有 ADC 可用
這年頭因為智慧型手機風暴使得小裝置若有螢幕就會讓人想用手碰看看
搞得好像有螢幕若沒觸控這產品就不能賣似的XD 連數位相機都玩這
結果搭個 STM32 沒圖形加速, 搞個 UI 不華麗, 滑動稍微有點頓就會有人有意見了XD
雖然我們也知道拿 STM32 來解 JPG/PNG 還期望 UI 是可以滑動實在不合理
但是一樣小的手機裝近代應用處理器卻都可以, 這一比就不太好看了XD
所以, 隨著時代改變, 就需要做點策略調整
不過既然這東西都做了, 就放出來, 這不受保密條款限制, 放行 ! XD

這篇紀錄的是在 Linux 上編譯 STM32 的程式, 然後在 Linux 上透過 RS232 寫進 STM32
使用的裝置是 stm32f10x, 其它版本請自理, 我只有這顆, 其它我幫不上忙XD
開始前需要準備一些東西



1. CodeSourcery ARM toolchain
理論上任意版本都行, 新版更新應該會以新應用處理器為主
這些舊的微控制器通常不受影響, 不過我還是抓最新版的來用, 反正不用錢XD
我用的是 arm-2012.03-57 這個, 他們網站若要下載會需要留 mail, 然後會將網址寄到你信箱
可能因為很多人在要所以寄信會延遲, 有時還會掉信, 所以請連打幾次XD

2. stm32f10x_stdperiph_lib
由 ST 官方開發的參考設計函式庫, 在他們網站上可以找到
要翻一下你的裝置, 然後選軟體, 再點選下載
那網址是腳本產生, 有可能會換, 所以就不直接貼網址
在別站點過不少死連結, 最後還是硬著頭皮去官網翻
這裡使用的是 3.5.0 版, 然後只能給 stm32f10x 系列用

3. stm32flash
http://code.google.com/p/stm32flash/
這工具可以下載編譯後的 hex 到 STM32 上

4. 我驗證完的整理包加一個 LCD 範例 → stm32-lib.zip
這裡面的東西都是外面找來的, 都別人寫的, 我只整理而已
裡面有一個用來編譯函式庫的 makefile, 一個對岸專家寫的 LCD 控制範例
還有最重要的, 最難寫的, 由老外專家做的連結腳本, 來源已經找不到沒法附網址
我承認是因為用了能動太興奮而忘記存網址XD 如果有人知道出處請回復, 我會盡快補上


使用方法:

先找個目錄, 例如 : /myproj/stm32
把整理包的東西解壓縮進去
此時 /myproj/stm32 下應該有 lib, lib-build, src 等目錄
接著把下載來的 stm32f10x_stdperiph_lib.zip 丟進 lib 目錄並解壓縮到此
此時應該會有個 STM32F10x_StdPeriph_Lib_V3.5.0 的目錄產生
接著修改 /myproj/stm32/make.cfg 這檔存放編譯器設定以及必需的編譯參數
將 PREFIX 設為當前這目錄, 也就是 /myproj/stm32
TARGET 是 toolchain 裡工具的前置名
以我選的 arm-2012.03-57 來說就是 arm-none-linux-gnueabi-
改這兩變數即可, 完成後存檔
然後加你的 CodeSourcery 到 PATH 中, 或是執行前輸入 :
export PATH=$PATH:/path/to/your/arm-201203-57/bin
接著開 console 到 /myproj/stm32/lib-build 下下指令:

make  # 這會做出 stm32f10x_stdperiph_lib 的函式庫
make install-lib # 這會產生 header file, 都是從 stm32f10x_stdperiph_lib 複製出來的

完成後接著是燒錄工具, 到 /myproj/stm32/stm32flash 下把下載來的 stm32flash.tar.gz 丟進去
解壓縮到這裡, 然後直接 make 即可, 這會產生 stm32flash 可執行檔
把這隻複製到上層, 也就是 /myproj/stm32/stm32flash 這裡, 複製前記得先改名資料夾以免檔名重複
這樣就完成了, 可以開始寫程式燒錄
在 /myproj/stm32/src 下有個 lcd-sample 目錄, 若要寫新的程式請複製整個資料夾去使用
例如寫一個 hello 程式, 那就複製 lcd-sample 目錄, 然後改名為 hello
要整個複製是因為裡面的東西可能無法共用, 現在沒有需要改它以後不一定完全不需要
裡面有四個檔, linker.ld 是連結腳本, 指引 linker 將編譯後的程式放到正確的記憶體位址
main.c 就是你的程式, makefile 是編譯腳本, startup.c 是硬體初始化, 配置中斷, 填入資料等
開 console 到 /myproj/stm32/src/lcd-sample 下, 然後下指令:

make  # 編譯你的程式
make write  # 從 /dev/ttyS0 燒錄程式, 如果選的 RS232 port 不同就需要修改, 詳細看 makefile
make clean  # 清除已編譯物件

燒錄前注意, 先將實驗板關閉電源, 接著 STM32 的 BOOT0 接腳必須接地, 然後開啟電源
這樣才會以 STM32 內建燒錄韌體開機, 才能用 RS232 燒錄
接著接上 RS232, 然後下命令 make write

以我這張板為例, 箭頭處有一 jumper

拔起後再開機就可送燒錄資料
然後燒錄完成前把它插回去它就會自動重新啟動並執行剛才燒的內容

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。