STM32CubeIDE开发(二十九), 如何结合FreeRTOS开发STM32程序

这篇具有很好参考价值的文章主要介绍了STM32CubeIDE开发(二十九), 如何结合FreeRTOS开发STM32程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、STM32CubeIDE使用内置的FreeRTOS

二、创建使用FreeRTOS系统的STM32CubeIDE工程

三、使用FreeRTOS功能

四、编译及测试


一、STM32CubeIDE使用内置的FreeRTOS

        不同于STM32CubeIDE使用像RTThread这些第三方物联网系统,STM32CubeIDE在安装时就已经在MiddleWare中间件一栏直接支持了FreeRTOS操作系统。

        既然STM32CubeIDE已经把FreeRTOS深度整合到了自家的系统中,所以移植及使用FreeRTOS变得非常方便。STM32CubeMX图形配置界面的MiddleWare一栏,可以设置FreeRTOS是否开启来使用该实时系统。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

二、创建使用FreeRTOS系统的STM32CubeIDE工程

        本文是基于STM32L496VGT3的MCU芯片创建一个新的STM32工程“stm32L496VGT3_CMSIS_OS_V1”,并使用FreeRTOS系统前,已经开启了lpusart串口通信及三个LED的GPIO_OUTPUT接口,及实现了串口lpusart及LED灯驱动(关于这边部分设置及实现就略过,读者可以参考本专栏的其他博文)。

        现双击(.ioc)文件进入cubeMX图像配置界面,开启使用FreeRTOS系统。在MiddleWare中间件一栏,选择FreeRTOS,在右边Interface下来框,会出现Disable、CMSIS_V1和CMSIS_V2三个选项。本文选择CMSIS_V1进行测试。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         关于CMSIS_V1和CMSIS_V2的不同,详见CMSIS ARM官方关于微控制器软件接口标准CMSIS定义(如下图)。Cortex微控制器软件接口标准(CMSIS)是独立于供应商的硬件抽象层,用于基于Arm Cortex处理器的微控制器,并且CMSIS提供了到处理器和外围设备,实时操作系统以及中间件组件的接口。不同之处简单来说,v1使得软件能够在不同的实时操作系统下运行(屏蔽不同RTOS提供的API的差别),而v2则是拓展了RTOS v1,兼容更多的CPU架构和实时操作系统,说白话就是,CMSIS_V2是在CMSIS_V1上,兼容CMSIS_V1的,具有更多功能及支持更多硬件型号。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         点击保存或生成代码按钮,会弹出下面对话框:

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         这是关于freertos暴露给用户的API接口并不是原生的freertos接口,是经过cmsis-rtos进行一次包装之后的,在使用timebase源是有所冲突,编译器会建议你把timebase源切换到非systick。这是因为freertos的调度时钟是强制性使用systick的并且systick的中断优先级被设置为最低。

        而hal 库需要使用到的tick计数源,HAL标准库有很多有超时功能的函数接口都用到这个hal timebase。所以编辑器在生成代码时候就强烈建议hal timebase和freertos 使用的systick不要共用。systick已经被强制为最低优先级,hal timebase用的话就可能产生计数不准的情况。

        至于systick已经被强制为最低优先级,是因为freertos是一个嵌入式实时操作系统,要确保中断能够立马得到响应,就要把调度器的时钟优先级设置为最低就不会影响其他外设中断的及时响应。在一旦在stm32cubemx中勾选了freertos后,systick的优先级自动被设置为最低。

        freertos还有个配置优先级选项:configMAX_SYSCALL_INTERRUPT_PRIORITY高于该配置的优先级中断中都不能调用freertos的任何API,但是同时他也不会受freertos的内核影响而可以得到最实时的响应。如果在中断服务函数中需要使用freertos的API接口函数的话就要把该中断的优先级配置为小于或等于 configMAX_SYSCALL_INTERRUPT_PRIORITY。

        在stm32L0系列单片机的优先级一共有四个等级:0-3,0为最高优先级3为最低。使用freertos以后sytick就在该等级。把 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 配置为2,这样特别实时的中断优先级就可以配置为0或者1,而正常需要调用freertos API的中断就可以配置为2或者3优先级。

        现在按编辑器建议,去修改开启USE_NEWLIB_REENTRANT

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         同时调整HAL TimeBase设置更换TimeBase源。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         再次点击保存,编辑器就无告警弹出,生成代码后,关于FreeRTOS生成代码如下:

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         并在main,c主函数文件中,给出了关于FreeRTOS最简要的调用代码。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         并能编译通过。

三、使用FreeRTOS功能

        现在再次回到cubeMX图形编辑界面,进入FreeRTOS配置的任务与队列配置页面,添加一个LedTask(闪灯任务),修改任务名为LEDTask,修改Function名为LEDTaskFunc,注意任务名和Function名不能一样,其他保持默认。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         关于NewTask几个属性栏:

  •         Task Name: 设置任务的名称,它会基于此名字建立一个指向任务的句柄
  •         Priority: 设置任务的优先级,高优先级的任务会抢占低优先级的任务
  •         Stack Size: 设置任务栈的大小,用于储存任务相关的变量,关于堆栈详细内容请参考
  •         Entry Function:设置任务的入口函数,这个函数便是开发者实现任务功能的地方
  •         Code Generation Option: IDE自动生产初始代码的选项,这里选择默认设置
  •         Parameter: 传递给任务的参数
  •         Allocation: 选择动态的话是生成在堆中,选择静态的话则生成在静态区
  •         Buffer Name和ControlBlock Name:在Allocation选择静态时生效。

        配置好这个LedTask后,保存生成输出代码,去FreeRTOS的用户可编译源文件freertos.c中,找到LEDTaskFunc函数,这就是我们在cubeMX图形界面配置的任务入口,可以在这里修改实现自己任务内容。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         例如本文在源码文件引入"../../ICore/led/led.h"驱动头文件,该LEDTaskFunc函数循环体内加上闪灯功能Toggle_led0()。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         关于LEDTaskFunc函数调用,在主函数中初始化先调用FreeRTOS初始化API:“MX_FREERTOS_Init()”,然后在调用osKernelStart()启用。MX_FREERTOS_Init函数是图形配置生成的,在freertos.c文件中。另外为了防止主函数循环一直占用资源,调用一个延时HLA_Delay(100),防止LEDTaskFunc函数循环抢不到资源。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

四、编译及测试

        【1】进入项目属性设置页面,配置工程输出文件格式支持。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         【2】配置程序运行按钮下来列表,点击“运行配置”,新建一个配置选项,默认配置即可,选择串口支持格式。或者采用其他烧写工具实现。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         本文开发板支持ST-Link加载。

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         【3】点击运行按钮,完成编译下载

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX

         【4】观察效果,只有LED0在闪烁,而代码实现中只有在LEDTaskFunc函数循环中调用了Toggle_led0(),说明FreeRTOS系统已经被正确使用:

CubeIDE调用FreeRTOS实现闪灯任务-CSDN直播

 补充,不好意思,忘了自己等级不够,放不了视频,给出图片效果如下:

stm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMXstm32cubeide freertos,STM32CubeIDE开发实践案例,stm32,FreeRTOS,嵌入式,stm32cubeIDE,stm32cubeMX文章来源地址https://www.toymoban.com/news/detail-651246.html

到了这里,关于STM32CubeIDE开发(二十九), 如何结合FreeRTOS开发STM32程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在STM32CubeIDE中使用Tracealyzer图形化调试FreeRTOS

    Tracealyzer可以以图形化的方式跟踪记录FreeRTOS操作系统的工作相关信息。本文结合官方教程以及自己的实践,总结出了Tracealyzer在STM32CubeIDE开发环境中的使用方法。 网上很多同类教程是基于MDK(keil的),这里针对STM32CubeIDE进行了修改。 Tracealyzer具有2种工作模式,快照模式snapsho

    2024年02月09日
    浏览(29)
  • 开发环境搭建-stm32CubeIDE配置

    使用方法如下: 在CubeIDE的安装路径STM32CubeIDEplugins下找到org.eclipse.cdt.ui_7.3.201.202205131409.jar,并将此文件改名备份,然后,将下载的同名插件文件复制到该路径下,重新启动STM32CubeIDE即可。 百度地址 链接: https://pan.baidu.com/s/17qxUiMLNhVgsV0rx0f2U5g 提取码: a5yf Window-preferences-General

    2024年02月09日
    浏览(36)
  • STM32CubeIDE开发(四), stm32调试信息串口通信输出显示

    目录 一、stm32串口配置 三、串口驱动功能调用及编译实现 四、编译测试         关于cubeIDE开发基本技巧及流程,本文不详细叙述,请参考:cubeIDE快速开发流程_py_free的博客-CSDN博客_cubeide汉化 一、stm32串口配置         本文采用的开发板是stm32L496VGT3,其有两个 USB 接口,

    2023年04月08日
    浏览(42)
  • 【STM32Cube开发记录】1-下载和安装STM32CubeIDE

    【STM32Cube开发记录】1-下载和安装STM32CubeIDE 【STM32Cube开发记录】2-STM32CubeProgrammer的使用 【STM32Cube开发记录】3-STM32CubeMX的使用 【STM32Cube开发记录】4-标准库 HAL库 LL库 【STM32Cube开发记录】5-寄存器和存储器映射 【STM32Cube开发记录】6-STM32核心功能 【STM32Cube开发记录】7-Debug调试功

    2024年01月17日
    浏览(34)
  • STM32CubeIDE开发(一),快速开发流程初体验

    目录 一、cubeIDE下载、安装  二、创建工程及配置芯片引脚 三、编码及编译 四、加载已编译程序到硬件及测试 五、程序运行效果 一、cubeIDE下载、安装         STM32CubeIDE是STM32Cube软件生态系统的一部分,是面向st芯片的高级C/C++开发平台,具有STM32微控制器和微处理器的外

    2024年02月02日
    浏览(41)
  • STM32CubeIDE开发实践案例-专栏总述

    STM32CubeIDE开发专栏总述 目录 一、本专栏基本结束 二、专栏内容及博文索引(共36篇)         2.1 基础知识         2.2 日志打印输出         2.3 内部功能         2.4 各种外设         2.5 RTOS系统结合         2.6 人工智能-cube.AI         2.7 篇外-RTThrea

    2024年02月15日
    浏览(29)
  • STM32CubeIDE开发(十一), STM32实时时钟(RTC)写入及读取日历时间开发要点

    目录 一、RTC简介 二、工程创建及配置  三、驱动代码设计实现 四、编译及测试         实时时钟的缩写是RTC(Real_Time Clock),核心是晶振,晶振频率一般为32768 Hz 。它为分频计数器提供精确的与低功耗的实基信号。它可以用于产生秒、分、时、日等信息。为了确保时钟长期

    2024年01月16日
    浏览(36)
  • STM32CubeIDE开发(三十三), stm32人工智能开发应用实践(Cube.AI).篇三

    目录 一、cube.AI实际项目应用 二、创建工程 2.1 工程配置 2.2 外设代码设计 2.3 传感器数据采集与输出源码设计 2.4 编辑下载程序,采集数据  三、模型训练 四、cube.AI配置及c模型生成 五、模型调用及测试         接篇二,前文都是采用FP-AI-SENSING1案例和配套的B-L475E-IOT01A开

    2024年01月17日
    浏览(58)
  • STM32CubeIDE开发(三十一), stm32人工智能开发应用实践(Cube.AI).篇一

    目录 一、cube.AI简介及cubeIDE集成        1.1 cube.AI介绍        1.2 cube.AI与cubeIDE集成与安装         1.3 cube.AI支持硬件平台         1.4 cube.AI应用的好处  二、FP-AI-SENSING1        2.1 FP-AI-SENSING1简介           2.2 FP-AI-SENSING1软件包支持硬件平台 三、FP-AI-SENSING1部署        

    2024年01月22日
    浏览(35)
  • STM32CubeIDE开发(二), 全面解析cubeMX图形配置工具

    目录 一、cubeIDE 集成cubeMX 二、STM32CubeMX界面简介         2.1 总界面及支持功能        【1】 功能页面          【2】支持配置的功能栏目          2.2 通信接口外设配置         【1】CAN外设          【2】FMC外设         【3】I2C外设         【4】串

    2023年04月12日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包