軟件版本:STM32CubeMX 5.2.1
芯片:STM32F412RETx
網(wǎng)上看到一些設(shè)置的文章,一般都是舊版軟件的配置旅东,所以自己設(shè)置后震蒋,記錄一下
1. 選擇FreeRTOS瞬场,然后下拉選擇CMSIS_V2,以前也沒用過句喜,第一次用所以直接就選擇高版本的
默認(rèn)配置下會(huì)自動(dòng)創(chuàng)建一個(gè)task
什么都不修改预愤,直接生成工程會(huì)報(bào)警告
大致意思是FreeRTOS會(huì)使用Systick(而且時(shí)強(qiáng)制使用Systick,不能修改的)咳胃,建議將SYS里的Timebase Source改成其他你不用的定時(shí)器
修改后再次點(diǎn)生成工程就沒報(bào)錯(cuò)的了植康,但是實(shí)際還是有問題
選擇NVIC,就會(huì)看到一個(gè)警告彈窗出來
由于FreeRTOS里中斷優(yōu)先級(jí)時(shí)從5開始的展懈,如果原來已經(jīng)設(shè)置過串口销睁、ADC、定時(shí)器等存崖,則這里還要修改這些中斷優(yōu)先級(jí)
生成工程后冻记,編譯發(fā)現(xiàn)一堆未定義報(bào)錯(cuò)
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来惧,對(duì)比編譯時(shí)顯示未定義的函數(shù)冗栗,就會(huì)看到是禁用狀態(tài),大概給看一下后,我懶得對(duì)比隅居,就干脆全部enable钠至,
在生成工程,編譯胎源,還有個(gè)未定義
linking...
STM32F412\STM32F412.axf: Error: L6218E: Undefined symbol uxTaskGetSystemState (referred from cmsis_os2.o).
但是再Include Parameters里沒有這個(gè)函數(shù)
在Keil里對(duì)整個(gè)工程搜索uxTaskGetSystemState棉钧,發(fā)現(xiàn)uxTaskGetSystemState定義在task.c文件里,需要條件configUSE_TRACE_FACILITY == 1滿足才行
再回到stm32cubemx查看freeRTOS配置涕蚤,使能USE_TRACE_FACILITY
再生成工程宪卿,編譯就應(yīng)該沒問題了
不過我的是已經(jīng)寫過其他功能的工程添加FreeRTOS,所以我這邊還有另一個(gè)報(bào)錯(cuò)
../Src/main.c(1171): error: #247: function "HAL_TIM_PeriodElapsedCallback" has already been defined
HAL_TIM_PeriodElapsedCallback重復(fù)定義赞季,因?yàn)槲以瓉硪呀?jīng)使用過定時(shí)器愧捕,自己重載定義了HAL_TIM_PeriodElapsedCallback函數(shù),在添加FreeRTOS時(shí)申钩,需要修改SYS的Timebase Source為其他定時(shí)器,stm32cubemx就會(huì)自動(dòng)再創(chuàng)建一個(gè)HAL_TIM_PeriodElapsedCallback函數(shù)瘪阁,所以就重定義了撒遣,把自己定義的HAL_TIM_PeriodElapsedCallback刪掉,用stm32cubemx生成的那個(gè)函數(shù)即可
至于FreeRTOS配置里的各種參數(shù)配置的意思就不說了管跺,因?yàn)槲叶疾皇煜ひ謇瑁瑏y說誤導(dǎo)人