STM32CubeIDE开发(三十), 如何结合RT-Thread开发STM32程序

目录

一、RT-Thread系统

二、cubeIDE安装RT-Thread支持

三、创建工程并添加RT-Thread支持

 四、工程调整

五、编译错误问题解决

 六、下载及测试


一、RT-Thread系统

        随着物联网(IoT)市场的迅猛发展,嵌入式设备联网成为了一个刚需。物联网的核心和基础仍是互联网,但不同于互联网强调人与人的互联,物联网是在这样的基础上延伸和扩展出人与物、物与物之间的连接网络。嵌入式设备的联网会使得软件复杂性大幅增加,传统的嵌入式RTOS(实时操作系统)内核已经越来越难满足市场的需求,在这种情况下,物联网操作系统(IoT OS)的概念应运而生。

        物联网操作系统主要分为两大类,一是由传统的嵌入式RTOS发展而来,典型代表有FreeRTOS、LiteOS、RT-Thread、Arm Mbed OS;二是由互联网公司的云平台延伸而来,基于传统操作系统进行“剪裁”和定制,典型代表有Ali OS Things、TencentOS tiny、Win10 IOT。

        RT-Thread 是一款主要由中国开源社区主导开发的开源实时操作系统(v3.1.0以及以前版本遵循GPLv2+许可协议,v3.1.0以后版本遵循 Apache License 2.0 开源许可协议),具有完全的自主知识产权,其社区化,中立,开放等产品特性,在国内开源社区具有很强的应用基础。

二、cubeIDE安装RT-Thread支持

        【1】打开cubeIDE工具,点击help->Embeedded Software Packages Manager菜单,打开软件包管理界面,cubeIDE提供了离线及在线两种安装软件包的方式。

        (1)选择From Url ...按键(在线安装);

        (2)打开用户自定义包管理界面,点击New按钮;

        (3)填写RT-Thread在线安装包的源地址:https://www.rt-thread.org/download/cube/RealThread.RT-Thread.pdsc ;

        (4)点击Check检查源地址是否可行,OK的话输入框右侧会出现“√”,点击OK按钮确定。

        【2】 点击 OK 回到 User Defined Packs Manager 界面,再次点击 OK,CubeMX 自动连接服务器,获取包描述文件。回到 Manage embedded software packages 界面,就会发现 RT-Thread Nano 软件包列表,选择该软件包版本,点击 Install Now,如下图所示:

         【3】点击安装之后,弹出协议确认对话框,同意该协议,点击 Finish,如下图所示

         【4】等待安装完成,成功安装后,版本前面的小蓝色框变成填充的绿色,如下图所示:

         RT-Thread有多个版本,其他版本安装类似,安装好的版本前面对话框会填充为绿色,未安装版本是白色的勾选框。

        RT-Thread软件包安装完毕,退出 Manage embedded software packages 界面,进入cubeIDE主界面。

三、创建工程并添加RT-Thread支持

        【1】点击文件->新建工程->STM32 Project,进入工程创建页面,在MCUMPU selecter页面,按芯片选择创建工程(本文stm32496VGTx),选择好匹配自己手中芯片型号后点击下一步。

         在工程设置窗口中,填入工程名称(及工程路径),完成工程创建。

         完成工程创建后,会直接进入cubeMx配置界面,若没有,请自行双击工程目录下的"*.ioc"文件进入。

       【2】 首先开启系统模式的串口功能及SysTick滴答定时器(该配置会出现告警,先故意为之,后续说明如何调整)支持

         开始RCC外部高速时钟,参数默认设置即可

         本文采用常用的按键及闪灯程序来测试,STM32L496VGT3支持三个按键及三个LED灯,参照其芯片原理图及引脚说明列表,配置按键及LED灯的GPIO引脚。

         现在芯片视图选择对于针脚的模式(GPIO_OUTPUT或GPIO_INPUT),然后去属性窗口配置其参数及命名。

         时钟设置,简单配置接口,STM32L496VGT3支持到80MHz,本文直接拉满。

        【3】 点击 Softwares Packages->Select Components,进入组件配置界面,选择 RealThread, 然后根据需求选择 RT-Thread 组件,然后点击 OK 按钮,如下图所示:

         RT-Thread软件包中包含 kernel, shell 和 device 三个部分,
            1)仅选择 kernel 表示只使用 RT-Thread 内核,工程中会添加内核代码;
            2)选择 kernel 与 shell 表示在使用 RT-Thread的基础上使用 FinSH Shell 组件,工程中会添加内核代码与 FinSH 组件的代码。
            3)选择 device 表示使用 rt-thread 的 device 框架,用户基于此框架编写外设驱动并注册后,就可以使用 device 统一接口操作外设。

        本文将 kernel, shell 和 device都选择,然后点击确定,回到Pinout&Configuration界面,将会新增一个“Software Packs”目录,点击进去,多了 RT-Thread软件包选项。

         勾选kernel, shell 和 device选项,页面将会出现 RT-Thread参数配置页面,先按默认配置。

         RT-Thread 操作系统重定义 HardFault_Handler、PendSV_Handler、SysTick_Handler 中断函数,为了避免重复定义的问题,在生成工程之前,需要在中断配置中,代码生成的选项中,取消选择三个中断函数(对应注释选项是 Hard fault interrupt, Pendable request, Time base :System tick timer),最后点击生成代码,具体操作如下图 所示:

        【4】 工程管理(Project Manager)配置页面保持默认配置,点击保存或生成代码按钮生成输出代码。

         届时,会弹出告警信息,这是因为在stm32cubeMX配置FreeRTOS时,选择时钟源为SysTick会有提示警告。

         【5】SysTick以最低的中断优先级运行,因此,在执行此中断时,必须取消所有中断的屏蔽。虽然是告警信息,但为了安全起见,因此需要将SysTick替换为TIM比较好。回到cubeMx配置界面,选择TIM1为系统时钟,注意,选择了TIM1作为系统时钟后,TIM1被占用,变成灰色,不能在用作它途。

 四、工程调整

        生成代码后,需要我们进行rt-thread调用,在main.c文件中添加rtthread.h:

         在主循环中,添加如下代码,简单调用rt_thread_mdelay(100)函数验证rtthread是否生效:

  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET);
	  rt_thread_mdelay(100);
	  HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
	  	  rt_thread_mdelay(100);
    /* USER CODE END WHILE */

五、编译错误问题解决

        【1】修改启动文件startup_stm32l496vgtx.s的 bl main 改为 bl entry(图片中第97行),更改此处使芯片在进入main之前启动rt-thread。

        【2】Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU Setting中的Floating-point ABI改为Softwae,该选项可解决浮点相关的一个错误。

        【3】 调整Properties --> C/C++ Build --> Settings --> Tool Settings --> MCU GCC Assembler --> Misellaneous添加flags:-Wa,-mimplicit-it=thumb

         【4】编译会出现usart找不到的报错,这是由于我们开启了console shell功能,因此需要配置串口支持。

         在cubeMx中,开启串口功能

         按芯片原理图及引脚参数要求配置

         【5】生成新代码后,再次编译,此时可能会出现以下报错,也是rtthread的console shell有关:

         这从字面意思是需要去rtconfig.h把“#include "finsh_config.h"”注释取消。

         【6】再次编译,下面这个错误问题应该是HAL库及RT-Thread支持版本跟进的问题

         本文所使用的STM32L496VGTX和CubeIDE版本引用的HAL库的USART_TypeDef定义已经没有了“DR字段”

         该错误点的函数我从字面意思理解,暂时将其调整为如下,调整后编译通过:

 六、下载及测试

        【1】设置CubeIDE对该项目的下载支持,右键项目,打开项目属性,选择程序编译输出选项。

         【2】配置运行下载,点击运行按钮下拉列表选择运行配置,进入运行配置界面,配置程序运行加载信息如下图示例。

         【3】点击运行,程序顺利下载到STM32L496VGTX板上,闪灯程序正常运作。

         程序效果:

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32CubeIDE 中使用 RT-Thread,可以按照以下步骤进行: 1. 首先,你需要从 RT-Thread 官网下载 STM32CubeIDE 的插件。插件包含了 RT-Thread 的配置文件和驱动代码,可以让你在 STM32CubeIDE 中直接使用 RT-Thread。 2. 下载并安装 STM32CubeIDE,确保你已经安装了合适版本的 STM32CubeMX。 3. 打开 STM32CubeIDE,在 "Help" 菜单下找到 "Eclipse Marketplace"。 4. 在 "Eclipse Marketplace" 中搜索 "RT-Thread" 插件,安装它。 5. 安装完成后,重新启动 STM32CubeIDE。 6. 创建一个新的 STM32 项目或者打开一个已有的项目。 7. 在 "Project Explorer" 视图中,右击项目名称,选择 "Properties"。 8. 在弹出的对话框中,选择 "C/C++ Build" -> "Settings" -> "Tool Settings"。 9. 在 "Tool Settings" 中,选择 "MCU GCC Compiler" -> "Preprocessor"。 10. 在 "Defined symbols (-D)" 中添加 RT-Thread 的宏定义,例如:`RT_USING_RTTHREAD`,这些宏定义可以在 RT-Thread 的配置文件中找到。 11. 在 "Tool Settings" 中,选择 "MCU GCC Compiler" -> "Include paths"。 12. 添加 RT-Thread 的头文件路径,这些路径可以在 RT-Thread 的配置文件中找到。 13. 在 "Project Explorer" 视图中,找到 RT-Thread 的配置文件,通常是 rtconfig.h 或者 rtconfig.py。 14. 根据你的需求,配置 RT-Thread 的内核选项、驱动选项和组件选项。 15. 编写你的应用程序代码,并且按照 RT-Thread 的编程规范来使用 RT-Thread 的 API。 16. 编译、烧录和运行你的应用程序。 以上是在 STM32CubeIDE 中使用 RT-Thread 的基本步骤。根据你的具体需求,可能还需要进行一些额外的配置和修改。记得参考 RT-Thread 官方文档和示例代码来帮助你进行开发

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

py_free-物联智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值