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.





        •  測試影片如下:
           



    10 則留言:

    1. 強者賈爸,我們需要更多有關 freeRTOS 的深入介紹與說明 靠你了

      回覆刪除
    2. 请问你 能告诉我 为什么要 将void SVC_Handler(void),void PendSV_Handler(void),void SysTick_Handler(void) 删除吗?

      这样的话,FreeRTOS 不就无法使用中断了???


      email :812331053@qq.com

      回覆刪除
      回覆
      1. Hello:

        刪除只是因為重複定義, 這三個function在FreeRTOS都已經另有他用了, 所以不能在stm32fxx_it.c裡面再定義一次,否則會build不過.

        這三個function在FreeRTOS裡面所代表的意義可以參考FreeRTOSConfig.h裡面,都已經被FreeRTOS定義了.
        /* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
        standard names - or at least those used in the unmodified vector table. */
        #define vPortSVCHandler SVC_Handler
        #define xPortPendSVHandler PendSV_Handler
        #define xPortSysTickHandler SysTick_Handler

        刪除

    3. 添加任务编译之后 出现了 这个错误!!!请问是不是堆栈溢出???

      Error[Li005]: no definition for "vApplicationMallocFailedHook" [referenced from F:\IAR project\STM32Cube_FW_L0_V1.7.0\Projects\STM32L073RZ-Nucleo\

      回覆刪除
      回覆
      1. Hello:

        看起來只是沒有定義vApplicationMallocFailedHook這個function, 所以才build不過, 你先檢查一下configUSE_MALLOC_FAILED_HOOK這個define是不是設定為1了?

        刪除
    4. 作者您好. 我目前在研究stm32f429, 之前沒這方面的經驗,
      不知道可以請問一下您從哪邊學習這方面的東西,
      主要想知道怎麼從無到有去學習stm32f429,
      有沒有參考文件或是推薦的書可以學習的更深入
      謝謝 Chris

      回覆刪除
    5. Hello Kuo-Yuan:

      我是從ST其它系列的MCU開始入門的, 例如像是M0/M3, 因此當一個熟悉之後, 其它在學習就會比較快速,
      且使用ST最大的好處就在於只要Google, 就會有一大堆可以參考的資料可供閱讀, 且恰巧之前的工作會常與ST
      原廠工程師合作, 因此也常從他們身上學到很多知識.

      除了Google國內外的資料外, 很多書局都有賣簡體的ST參考書籍, 也建議你可以參考看看, 當然最重要的還是找個志同道合的人一起討論比較快...xDD

      Have a nice day,
      JustinWang

      回覆刪除
      回覆
      1. Hi Justin
        所以你是從最基礎的開發板開始寫的, 那我大概了解了~
        目前找到資料是不是簡體的資料比較多呢?(蠻常找到都是大陸那方面的資料)
        簡體書的部分有找過, 大部分的書籍都有點進階 (哈哈~這個部分我也是努力的再找)
        另外不知道可以請問你有E-mail可以交流嗎?

        刪除
      2. Hi Justin
        所以你是從最基礎的開發板開始寫的, 那我大概了解了~
        目前找到資料是不是簡體的資料比較多呢?(蠻常找到都是大陸那方面的資料)
        簡體書的部分有找過, 大部分的書籍都有點進階 (哈哈~這個部分我也是努力的再找)
        另外不知道可以請問你有E-mail可以交流嗎?

        刪除
      3. Hello Kuo-Yuan:

        我的e-mail是wangwewe@mirlab.org,目前看起來網路資料還是簡體和英文最多吧, 書籍的話則是以簡體為主.

        Have a nice day,
        JustinWang

        刪除