STM32CubeMX 5.2.1快速设置freeRTOS

软件版本:STM32CubeMX 5.2.1

芯片:STM32F412RETx

网上看到一些设置的文章,一般都是旧版软件的配置,所以自己设置后,记录一下

1. 选择FreeRTOS,然后下拉选择CMSIS_V2,以前也没用过,第一次用所以直接就选择高版本的

STM32CubeMX 5.2.1快速设置freeRTOS_第1张图片
image

默认配置下会自动创建一个task

什么都不修改,直接生成工程会报警告

STM32CubeMX 5.2.1快速设置freeRTOS_第2张图片
image

大致意思是FreeRTOS会使用Systick(而且时强制使用Systick,不能修改的),建议将SYS里的Timebase Source改成其他你不用的定时器

STM32CubeMX 5.2.1快速设置freeRTOS_第3张图片
image

修改后再次点生成工程就没报错的了,但是实际还是有问题

选择NVIC,就会看到一个警告弹窗出来

STM32CubeMX 5.2.1快速设置freeRTOS_第4张图片
image
STM32CubeMX 5.2.1快速设置freeRTOS_第5张图片
image

由于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 5.2.1快速设置freeRTOS_第6张图片
image

回到stm32CubeMx,选择FreeRTOS后再选择Include parameters,对比编译时显示未定义的函数,就会看到是禁用状态,大概给看一下后,我懒得对比,就干脆全部enable,

STM32CubeMX 5.2.1快速设置freeRTOS_第7张图片
image

在生成工程,编译,还有个未定义

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

但是再Include Parameters里没有这个函数

在Keil里对整个工程搜索uxTaskGetSystemState,发现uxTaskGetSystemState定义在task.c文件里,需要条件configUSE_TRACE_FACILITY == 1满足才行

STM32CubeMX 5.2.1快速设置freeRTOS_第8张图片
image

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

STM32CubeMX 5.2.1快速设置freeRTOS_第9张图片
image

再生成工程,编译就应该没问题了

不过我的是已经写过其他功能的工程添加FreeRTOS,所以我这边还有另一个报错

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

image

HAL_TIM_PeriodElapsedCallback重复定义,因为我原来已经使用过定时器,自己重载定义了HAL_TIM_PeriodElapsedCallback函数,在添加FreeRTOS时,需要修改SYS的Timebase Source为其他定时器,stm32cubemx就会自动再创建一个HAL_TIM_PeriodElapsedCallback函数,所以就重定义了,把自己定义的HAL_TIM_PeriodElapsedCallback删掉,用stm32cubemx生成的那个函数即可

至于FreeRTOS配置里的各种参数配置的意思就不说了,因为我都不熟悉,乱说误导人

你可能感兴趣的:(STM32CubeMX 5.2.1快速设置freeRTOS)