1. 程式人生 > >STM32F4 執行CODEC2-0.6庫編譯

STM32F4 執行CODEC2-0.6庫編譯

STM32F407 執行 CODEC2-0.6

執行環境

開發板:STM32F407
CODEC庫: CODEC2-0.6
HOST主機系統: ubuntu 32位(64位編譯失敗,需要新增32位庫)
交叉編譯器: gcc-arm-none-eabi-4_7-2013q1
我是在無聯網環境下進行的,聯網情況下的編譯可能會更簡單,沒有實驗過!

編譯流程

  1. codec2-0.6 自帶支援STM32 的庫,解壓原始碼到工作目錄下,首先修改MAKEFILE:
    交叉編譯器bin目錄絕對路徑,也可以填寫相對路徑,都可以,只要能找到就行;
    BINPATH
    以下你也可以不用改,因為我是在無聯網機器上進行編譯的,所以只能需要修改,將 460 行註釋掉,否則會卡在聯網下載部分
    MAKEFILE


    MAKEFILE

  2. 之後在頂層目錄執行 make
    make之後顯示

  3. 之後顯示錯誤,讀取日誌,可以看到,建立了一個 DL 目錄,然後將 DL 目錄下修改檔案 stm32f4_dsp_stdperiph_lib.zip.part 名字,因為沒有聯網,所以沒有下載所需要的檔案,需要手動將檔案拷貝過來;
    此檔案可以去官網下,或者網上下,有很多資源,版本為 V1.4.0,與上面 MAKEFILE 中 PERIPHLIBVER 填寫的一致。

  4. 下載完成之後,放到 DL 目錄下,並修改檔名,在後面新增尾綴 .part:
    修改檔名

  5. 然後再次編譯 make:
    這裡寫圖片描述

  6. 發現有很多編譯錯誤,不過很有規律,都是變數重定義,很容易尋找,針對一個尋找問題:
    查詢結果


    結果

  7. 發現這些變數都是在標頭檔案中定義的,該標頭檔案被多個 .c 檔案引用,所以會出現錯誤,不清楚為什麼官方庫會出現這樣低階的錯誤,高版本中的庫就沒有這樣的錯誤。我進行過很多修改,發現越改越多,越改越亂,使用高版本好像也會出現其他問題。
    後來我發現一個很簡單的方法,WINDOWS系統中安裝了 KEIL5 ,我將軟體中的檔案拷貝複製過來了:
    WINDOWS檔案
    只需要拷貝 CMSIS 目錄下檔案即可!
    不過需要保留原來庫檔案中的 DEVICE 目錄,因為會使用到:
    這裡寫圖片描述
    這裡寫圖片描述

  8. 之後再次編譯,會出現錯誤:
    錯誤
    我認為這是源程式BUG,這兩個函式不應該被呼叫,所以註釋掉即可!

如果一切順利,應該就可以編譯成功了,接下來就可以使用 GDB 進行除錯了。

除錯

除錯還需要 STLINK 庫,這個我沒有記錄,應該比較容易,沒有什麼難點!

我是使用的 STLINK 連結到STM32F407 開發板上,在 UBUNTU 上需要安裝驅動;

  • 根據 庫檔案中自帶的 REDME 文件可以知道流程,首先執行sudo ./st-util -f /stm32/codec2-0.6/stm32/codec2_profile.elf
    執行結果

這裡寫圖片描述

  • 在另外一個終端中執行 GDB 程式, /stm32/gcc-arm-none-eabi-4.7-2013q1/bin/arm-none-eabi-gdb codec2_profile.elf :
    GDB 結果

  • 然後執行命令 tar ext :4242:
    這裡寫圖片描述

  • 然後下載程式 load
    下載

  • 下載程式成功結果顯示:
    這裡寫圖片描述

  • 下載成功之後,就可以進行除錯了,GDB 命令都是基本的
    GDB

這些執行流程在 README 中都有,僅供參考。

最後

  • 編譯器使用 4_7, 5_4 編譯無法除錯,問題未知;
  • MAKEFILE 優化等級提升為 O3,時間大幅縮短
  • 第一次嘗試修改庫檔案,不復制覆蓋 CMSIS ,但是解壓縮出現問題;原因未知;

很久以前的記錄了,可能有部分地方不清楚,見諒!