【官方原创】在H563上使用RTX5 RTOS LAT1584

关键字:RTX5, RTOS

1. 背景

客户反馈在STM32H563上使用RTX5 RTOS时,无法使用LSE,否则上电启动时会

死机。LSE本身与RTOS并不冲突,但为了解决客户问题,需要在H563 Nucleo板上测

试一下RTX5 RTOS。

2. RTX5 测试

KEIL RTX5 是 ARM 公司提供的一款实时操作系统(RTOS),它是 CMSIS-RTOS2

标准的实现,专为嵌入式系统设计,特别适用于基于 ARM Cortex-M 系列内核的微控制

器。RTX5 是 KEIL MDK(Microcontroller Development Kit)的一部分,具有高效、灵

活和易用的特点。

2.1. 创建工程

使用CubeMX创建工程,使能LSE,并使能LSCO输出LSE波形,使用TIM6作为

HAL 库的tick source,将SYS_TICK 保留给RTOS使用,最后生成 KEIL工程。

图1. CubeMX创建工程,使能LES

图2. 配置KEIL 组件

添加RTX5 组件后,即可将RTX5的代码添加到工程中。并且需要将stm32h5xx_it.c

文件中的 PendSV_Handler, SysTick_Handler, SVC_Handler 三个中断函数注释掉,因为

这三个函数在RTX5代码中已有定义。修改后,工程就能编译通过。

3. 多任务测试

添加完RTX5代码后,可以在main函数中,对RTOS进行初始化,并创建任务,启

动RTOS。

上面代码创建了两个任务:

复制代码
// 外设初始化,系统初始化,创建任务,启动系统 
  /* Initialize all configured peripherals */ 
  MX_GPIO_Init(); 
  MX_USART3_UART_Init(); 
  MX_ICACHE_Init(); 
  /* USER CODE BEGIN 2 */  
  osKernelInitialize();      // 系统初始化 
  threadIdStart = osThreadNew(TaskStart, NULL, &threadAttrStart);   //创建任务 
  osKernelStart();      //启动系统 
 
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin) 
{ 
  if (GPIO_Pin == GPIO_PIN_13) 
  { 
    osThreadFlagsSet(threadIdStart, 1);    // 给任务设置任务标志 
  } 
} 
 
// 两个任务 
void TaskUser(void *argument) 
{ 
    for(;;) 
    { 
        /* turn on the LED */ 
        HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_SET); 
        osDelay(500); 
 
        /* turn off the LED */ 
        HAL_GPIO_WritePin(LD1_GPIO_Port, LD1_Pin, GPIO_PIN_RESET); 
        osDelay(500); 
    } 
} 
void TaskStart(void *argument) 
{ 
    osThreadId_t osIdArr[10] = {0}; 
    int osThreadNum; 
    int flgComm = 0; 
  char* name = NULL; 
 
    printf(">>>>> H563 Nucleo RTX5 demo <<<<<\n\n"); 
    for(;;) 
    {    
        osThreadNum = osThreadEnumerate(osIdArr, 10); 
        printf("Total Threads: %d\n-------------------------\n", osThreadNum); 
  osThreadNum -= 1; 
        for(; osThreadNum>=0; osThreadNum--) 
        { 
          name = osThreadGetName(osIdArr[osThreadNum]); 
          if(name != NULL) 
            printf("[%d] Name: %s \n", osThreadNum, name);     
        } 
        printf("\n"); 
        flgComm = osThreadFlagsWait(1, osFlagsWaitAny, 1000u); 
        if(1 == flgComm) 
        { 
            if(threadIdUser != NULL) 
            { 
                osThreadTerminate(threadIdUser); 
                threadIdUser = NULL; 
            } 
            else 
            { 
                threadIdUser = osThreadNew(TaskUser, NULL, &threadAttrUser);  
            }         
        } 
    } 
} 

任务1:TaskStart,定期打印系统总的任务数量及任务名字。通过按键给TaskStart

发送任务标志,来创建或终止UserTask任务。

任务2:TaskUser,用于闪灯。

通过上面两个任务,对RTX5进行测试,能正常运行。观察LSCO输出的LSE时钟波

形正常,说明LSE也工作正常。

4. 小结

本文简要介绍了RTX5 RTOS的使用方法,并在H563 Nucleo板上实测了RTX5

RTOS操作系统。LSCO输出LSE时钟波形正常,也说明了LSE与RTX5系统并不冲突。


意法半导体公司及其子公司 ("ST")保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST 销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财 产。 本文档是ST中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致,请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。

相关推荐
星空真迷人38 分钟前
嵌入式鸿蒙并非精简版,核心究竟是什么?
stm32·单片机·嵌入式硬件·物联网·华为·harmonyos·iot
hongmai6668881 小时前
GK7205V300芯片深度解析:H.265低功耗视觉主控,助力安防监控高效选型
arm开发·嵌入式硬件·物联网·智能家居·h.265·risc-v
m0_466607701 小时前
只用三步使用MCSDK6生成电机控制工程
stm32·电机控制
2301_801434982 小时前
STM32F407移植TinyUSB
stm32·单片机·嵌入式硬件
Dlrb12113 小时前
Linux驱动---Linux 中断系统及其上与下半部的介绍与阻塞IO实现按键检测
linux·嵌入式硬件·imx6ull·中断·阻塞io
国产HT1621B3 小时前
YL4056 NTC 外围电阻 R3/R4 计算:从公式推导到工程选型
科技·单片机·嵌入式硬件
czhaii4 小时前
STC32G144K246 Ai8052单片机外设和功能
单片机·硬件工程
唔好理总之好犀利5 小时前
TVS管分析:MKS烧保险丝异常分析
stm32·单片机·嵌入式硬件
Dr.kangder6 小时前
嵌入式处理器虚拟化仿真技术(九)——SimpleScalar原理与应用
嵌入式硬件·架构·嵌入式·虚拟化·仿真
芯片设计-曾工15 小时前
当精准脉冲遇上清晰视界——CH2205E模块与YL1621的“黄金搭档“
驱动开发·stm32·单片机·51单片机·硬件工程