2014年10月17日 星期五

如何在 STM32F429 Discovery Kit 上移植FreeRTOS

      最近剛好有在STM32F429 Discovery kit上面移植FreeRTOS v8.0.1的機會, 想說藉著實作的過程, 順便把整個移植的步驟記錄下來, 以免以後忘掉.

需要準備的軟硬體如下:
1. STM32F4 Discovery kit for STM32F429
2. IAR EWARM v7.20
3. Mini USB Cable * 1
------------------------------------------------------------------------------------------------------------
移植步驟:

  • 至STMicroelectronics的官方網站下載範例程式碼
    1. http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF259090,下載STM32F429 Discovery kit example code.
    2. 進入網頁後, 搜尋"Related Tools and Software", 接著點選"STSW-STM32138"
    3. 接著會跳到"Sample & Buy"的頁面, 點選"Download"即可下載STM32F429的範例程式碼
    4. 將"stsw-stm32138.zip"解壓縮後, 即可得到"STM32F429I-Discovery_FW_V1.0.1"的資料夾
點選STSW-STM32138來下載檔案

直接點選Download及可以下載stsw-stm32138.zip

解壓縮後, 會看到STM32F429I-Discovery_FW_V1.0.1的資料夾

    • 至FreeRTOS的官方網站下載範例程式碼
      1. http://www.freertos.org/網頁, 並點選左方之"Download"
      2. 至RTOS Source Code Download Instructions的第二項, 點選連結下載
      3. 下載完畢會看到FreeRTOSv8.0.1.exe的檔案, 解壓後會看到FreeRTOSv8.0.1的目錄
      4. 接下來進入FreeRTOSv8.0.1的目錄,只留下FreeRTOS目錄,將不必要的檔案刪除掉.
      5. 進入FreeRTOS/Demo/, 將除了Common以外的目錄全部刪除掉.
      6. 將精簡過後的FreeRTOSv8.0.1資料夾複製到"STM32F429I-Discovery_FW_V1.0.1"資料夾底下. (ex: c:\STM32F429I-Discovery_FW_V1.0.1\Projects\Template\)
    • 使用IAR EWARM v7.20 開始將程式依序加進專案中.

      1. 先到達C:\STM32F429I-Discovery_FW_V1.0.1\Projects\Template\EWARM\,開啟Template專案.
      2. 在Template專案的地方按下右鍵, 選擇Add->Add Group.
      3. 輸入Group name.(ex: FreeRTOS_v8.0.1)
      4. 依序完成下列檔案的建置.
      5. 所有的檔案中, 僅有FreeRTOSConfig.h需由使用者自行建置, 其餘檔案皆可在FreeRTOS_v8.0.1當中找到, FreeRTOSConfig.h的範例可先參考此連結.
      6. 完成所有檔案建置後, 接下來將開始完成include檔案的路徑配置,首先在Template專案的地方按下右鍵, 選擇Options.

      7. 在C/C++ Compiler -> Preprocessor -> Additional include directories:(one per line)右邊的...方塊.
      8. 參考下列圖片加入FreeRTOS檔案所需之路徑.

      9. 在Assembler -> Preprocessor -> Additional include directories:(one per line)中加入下列路徑.
      10. 此時可以先按下"F7" 開始Build code, 但會發現有3個錯誤, 原因是因為"SVC_Handler" & "SysTick_Handler" & "PendSV_Handler" 這3個function在stm32f4xx_it.c重複定義.
      11. 所以我們開啟stm32f4xx_it.c, 將此檔案中的這3個function都刪除掉.
      12. 再按下"F7"重新Build code, 則可以發現沒有錯誤發生.
      13. 接下來可以開始來檢視main.c的程式碼:
        • 程式中總共創建了3個Task.
        • Task1每100msec執行一次, 且不停地Toggle LED3(Green LED).
        • Task2每500msec執行一次, 且不停地Toggle LED4(Red LED).

        • Task3每5msec執行一次, 僅不停地對Task3Task_Counter + 1.





        •  測試影片如下: