如何使用AzureRTOS和STM32CubeIDE创建线程?

使用中提供的软件包 STM32Cube生态系统是直接的,本文提供了所有步骤和演示代码。

 
  • 目标:本文的目的是让您初步了解如何在STM32Cube生态系统中支持AZURE-RTOS ThreadX
尽管该示例使用NUCLEO-H223ZG,但您可以对其他基于STM32H7的板使用相同的步骤。主要区别通常是引脚输出和时钟配置。
本文将向您展示如何从头开始一个项目,目标是让LED在几次点击中闪烁,同时使用一个简单的线程来完成。
演示框图:
  • STM32CubeIDE–逐步演示:
 
  1. 启动STM32CubeIDE(1.7.0使用的版本)
  2. 选择您的首选工作区,单击“启动”
  3. 在信息中心,选择启动新的STM32项目
 
  1. 特别是对于这个演示,我们将使用NUCLEO-H723ZG作为起点:
 
  1. 为您的项目命名,只需记住避免使用空格和特殊字符——如果您缺少任何库,STM32CubeIDE将立即自动开始下载
弹出窗口询问是否应在默认模式下初始化外围设备,单击“是”:

然后第二个弹出窗口要求打开设备配置透视图,再次单击“是”:
 
  1. 现在,您应该有一个配置了一些外围设备的MCU视图,在左侧,您将有初始代码,但没有添加ThreadX
添加软件包的时间:
 
  1. 在组件选择窗口中浏览并定位AzureRTOS包:
 
  1. 打开RTOS ThreadX并选中Core(核心)框,然后单击OK(确定)
 
  1. 这将在类别的下部添加软件包:
 
  1. 现在,通过单击它,您可以添加RTOS ThreadX框,这将显示AzureRTOS应用程序的配置选项

 
  1. 由于这个演示只是为了让LED闪烁,所以默认设置都已设置,但我们确实需要做另一个修改。默认情况下,HAL驱动程序将使用Systick作为其主要时基,但此计时器应仅留给AzureRTOS。
如果HAL库没有单独的时间源,编译将失败,因为两个库都想使用SysTick_Handler中断。为了防止这种情况,我们可以简单地为HAL选择一个不同的时基,方法是点击System Core/SYS并选择时基Source作为TIM6:
 
  1. 最后一个修改是,为了防止生成太多未使用的代码,我们可以决定不创建USB和以太网的功能,因为它们是在我们基于板创建设计时本地添加的,这可以通过删除它们的生成代码来完成:
 
  1. 一切就绪,我们可以按Alt+K生成代码,按Ctrl+S保存代码:
该项目现在有一组新的文件夹:

这是关于代码结构的详细信息:
 
  1.  最后一部分是创建第一个线程:
 
  • 打开Core\Src\app_threadx.c并在第37行左右开始添加代码,使用注释为以下代码找到合适的位置:
 
  • 在分配堆栈之后,我们可以在函数App_ThreadX_Init中创建线程:
关于我们刚刚添加的内容,请注意:
  • 创建线程的主函数
首先,由于我们想要访问LED定义,我们需要将main.h包含在同一个app_threadx.c文件中:

最后是我们的线索:

到目前为止,它可能还没有被清除,但默认的时基是10ms,因此通过使用tx_thread_sleep(20)实际上会等待200ms
 
  1. 从这一点开始,按Ctrl+B进行构建,您应该会看到0个错误和0个警告。
 
  1. 将板连接到计算机并进入调试模式,方法是首先单击项目名称,然后菜单“运行/调试为/STM32”:
在“编辑配置”窗口中,单击“调试”:
 
  1. 一旦进入“调试”透视图,点击播放即可使用ThreadX欣赏闪烁的LED。您也可以使用窗口/显示视图/ThreadX/ThreadX线程列表
要增强整体调试选项(一旦应用程序运行一段时间并暂停,线程列表将自动加载):
 
  • 有用的链接:
 
  • STM32管:https://www.st.com/en/development-tools/stm32cubeide.html
  • 核子-H723ZG以下为:https://www.st.com/en/evaluation-tools/nucleo-h723zg.html
  • ThreadX用户指南https://docs.microsoft.com/en-us/azure/rtos/threadx/about-this-guide
  • ThreadX api描述https://docs.microsoft.com/en-us/azure/rtos/threadx/chapter4
  • Github:https://github.com/STMicroelectronics/x-cube-azrtos-h7
  • 维基:https://wiki.st.com/stm32mcu/wiki/STM32CoreMW_overview
  • 结论:
将ThreadX应用程序添加到裸机项目包括:
    • 在STM32CubeMX/STM32CubeIDE中添加ThreadX组件
    • 在STM32CubeMX/STM32CubeIDE中适配ThreadX配置
    • 从STM32CubeMX/STM32CubeIDE生成代码
      1. 这将使用所有需要的文件更新项目结构
    • 使用ThreadX API创建ThreadX组件线程、互斥体等