STM32CubeMX 5.2.1快速設置freeRTOS

軟件版本:STM32CubeMX 5.2.1

芯片:STM32F412RETx

網上看到一些設置的文章,一般都是舊版軟件的配置,所以自己設置後,記錄一下

1. 選擇FreeRTOS,然後下拉選擇CMSIS_V2,以前也沒用過,第一次用所以直接就選擇高版本的

默認配置下會自動創建一個task

什麼都不修改,直接生成工程會報警告

 大致意思是FreeRTOS會使用Systick(而且時強制使用Systick,不能修改的),建議將SYS裏的Timebase Source改成其他你不用的定時器

 修改後再次點生成工程就沒報錯的了,但是實際還是有問題

選擇NVIC,就會看到一個警告彈窗出來

由於FreeRTOS裏中斷優先級時從5開始的,如果原來已經設置過串口、ADC、定時器等,則這裏還要修改這些中斷優先級

生成工程後,編譯發現一堆未定義報錯

linking...
STM32F412\STM32F412.axf: Error: L6218E: Undefined symbol eTaskGetState (referred from cmsis_os2.o).
STM32F412\STM32F412.axf: Error: L6218E: Undefined symbol uxTaskGetStackHighWaterMark (referred from cmsis_os2.o).
STM32F412\STM32F412.axf: Error: L6218E: Undefined symbol uxTaskGetSystemState (referred from cmsis_os2.o).
STM32F412\STM32F412.axf: Error: L6218E: Undefined symbol vTaskDelayUntil (referred from cmsis_os2.o).
STM32F412\STM32F412.axf: Error: L6218E: Undefined symbol xQueueGetMutexHolder (referred from cmsis_os2.o).
STM32F412\STM32F412.axf: Error: L6218E: Undefined symbol xTimerPendFunctionCallFromISR (referred from cmsis_os2.o).

回到stm32CubeMx,選擇FreeRTOS後再選擇Include parameters,對比編譯時顯示未定義的函數,就會看到是禁用狀態,大概給看一下後,我懶得對比,就乾脆全部enable,

在生成工程,編譯,還有個未定義

linking...
STM32F412\STM32F412.axf: Error: L6218E: Undefined symbol uxTaskGetSystemState (referred from cmsis_os2.o).

但是再Include Parameters裏沒有這個函數

在Keil裏對整個工程搜索uxTaskGetSystemState,發現uxTaskGetSystemState定義在task.c文件裏,需要條件configUSE_TRACE_FACILITY == 1滿足才行

再回到stm32cubemx查看freeRTOS配置,使能USE_TRACE_FACILITY

再生成工程,編譯就應該沒問題了

不過我的是已經寫過其他功能的工程添加FreeRTOS,所以我這邊還有另一個報錯

../Src/main.c(1171): error:  #247: function "HAL_TIM_PeriodElapsedCallback"  has already been defined

HAL_TIM_PeriodElapsedCallback重複定義,因爲我原來已經使用過定時器,自己重載定義了HAL_TIM_PeriodElapsedCallback函數,在添加FreeRTOS時,需要修改SYS的Timebase Source爲其他定時器,stm32cubemx就會自動再創建一個HAL_TIM_PeriodElapsedCallback函數,所以就重定義了,把自己定義的HAL_TIM_PeriodElapsedCallback刪掉,用stm32cubemx生成的那個函數即可

至於FreeRTOS配置裏的各種參數配置的意思就不說了,因爲我都不熟悉,亂說誤導人

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章