芯查查logo
  • 物料选型
  • 数据服务
    1. 新品推荐
    2. 查替代料
    3. 丝印反查
    4. 查品牌
    5. PCN/PDN
    6. 查代理
    7. 数据合作
  • 应用方案
  • SaaS产品
      SaaS产品
    1. 供应链波动监测预警
    2. 半导体产业链地图
    3. 智能BOM管家
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
正在使用账号登录iCEasy商城
【星允派 NEBULA PI】11:cube创建RTOS项目
原创 发布时间:2025/08/25 09:07
版块:
单片机/MCU论坛
简介:简单介绍使用STM32cube MX软件生成Rtos的简单工程。

一:RTOS的知识分享:

     RTOS 全称是 RealTime OperatingSystem,中文名就是实时操作系统。可以看出 FreeROTS 就是一个免费的 RTOS 类系统。这里要注意,RTOS 不是指某一个确定的系统,而是指一类系统。、操作系统允许多个任务同时运行,这个叫做多任务,实际上,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务,任务调度在各个任务之间的切换非常快!这就给人们造成了同一时刻有多个任务同时运行的错觉。、

    RTOS 的任务调度器被设计为可预测的,而这正是嵌入式实时操作系统所需要的,实时环境中要求操作系统必须对某一个事件做出实时的响应,因此系统任务调度器的行为必须是可预测的。像 FreeRTOS 这种传统的 RTOS 类操作系统是由用户给每个任务分配一个任务优先级,任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。

二:cube 工程的创建过程:

2.1 使能项目的RTOS功能:

在softpack中使能freertos设置,并且选择cmsis_v1版本

这里的还有V版本,CMSIS是一种接口标准,目的是屏蔽软硬件差异以提高软件的兼容性。RTOS v1使得软件能够在不同的实时操作系统下运行(屏蔽不同RTOS提供的API的差别),而RTOS v2则是拓展了RTOS v1,兼容更多的CPU架构和实时操作系统。这里为了简单的理解,我们仅仅使用cmsis_v1版本就好了。

2.2 时基的选择:这里sysstick作为系统的时间,为了不占用定时器的资源,这里我们使用基本的定时器6,或者基本定时器7作为系统的时间基础:

这里因为定时器6在之前的项目中做了其他用途,这里就是用的定时器7。

2.3 添加任务:

这里我们简单的添加两个任务,为了方便看到效果,添加板载的LED灯闪烁和串口1的输出功能。

这里值得注意的是,任务的优先级在添加任务时候,就配置好了,在中断向量分组中无需配置。

三:代码编写:

3.1 在生成的代码中添加 输出的字符串如下所示:

/* USER CODE BEGIN Includes */
extern UART_HandleTypeDef huart1;
static unsigned  char outputchar[] ={ "nebula pi STM32F103VE RTOS test  by:cong cong ge ge\r\n" } ;
/* USER CODE END Includes */

3.2 两个任务的代码如下所示:

/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the myTask02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
  for(;;)
  {
		HAL_GPIO_TogglePin(GPIOB ,GPIO_PIN_4);
    osDelay(1000);
  }
  /* USER CODE END StartTask02 */
}

/* USER CODE BEGIN Header_StartTask03 */
/**
* @brief Function implementing the myTask03 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask03 */
void StartTask03(void const * argument)
{
  /* USER CODE BEGIN StartTask03 */
  /* Infinite loop */
  for(;;)
  {		
		HAL_UART_Transmit(&huart1, outputchar, sizeof(outputchar), 0xffff); 
		osDelay(500);
  }
  /* USER CODE END StartTask03 */
}

四:实物测试图片如下所示:


源码地址如下所示:

https://gitee.com/congcong-brother/rymcus-evaluation-code-series.git

 

 

申请原创奖励
2025/08/25 09:07
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
发布者
聪聪哥哥
最新帖子
为何说UVISI064BU10G是全能型sCMOS相机个人电子元器件管理系统2.0ESP8266的重要更新V18.6国产唐瑞 DDR4 内存颗TRD4C8G63K2-V26C学而思可多编程掌机改装2
热门版块
查看更多
萤火工场
问型号
每日打卡
电子元器件
飞腾
开源硬件项目
单片机/MCU论坛
问行情
电子DIY
维修技术交流

5

收藏

分享

微信扫码
分享给好友

评论