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配置里的各种参数配置的意思就不说了,因为我都不熟悉,乱说误导人

 

 

 

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