美文网首页
STM32CubeMX 5.2.1快速设置freeRTOS

STM32CubeMX 5.2.1快速设置freeRTOS

作者: 坤kln | 来源:发表于2019-07-18 14:36 被阅读0次

    软件版本:STM32CubeMX 5.2.1

    芯片:STM32F412RETx

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

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

    image

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

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

    image

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

    image

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

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

    image 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).
    
    image

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

    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满足才行

    image

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

    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

          本文链接:https://www.haomeiwen.com/subject/mgrllctx.html