【官方原创】在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官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。

相关推荐
mastercoder--2 小时前
速通51单片机————矩阵键盘及其应用
嵌入式硬件·计算机外设·51单片机
d111111111d2 小时前
STM32 I2C通信详解:从机地址与寄存器地址的作用
笔记·stm32·单片机·嵌入式硬件·学习
普中科技2 小时前
【普中51单片机开发攻略--基于普中-2&普中-3&普中-4】-- 第 14 章 矩阵按键实验
单片机·嵌入式硬件·51单片机·开发板·按键检测·矩阵按键·普中科技
Mapple.3 小时前
TMS320C6748的初始化与STM32做个类比
stm32·单片机·嵌入式硬件
俊俊谢3 小时前
华大HC32F460轮询方式SPI通讯配置
单片机·嵌入式硬件·spi·hc32f460
LongRunning3 小时前
【BLE】STM32WB55_官方OTA
stm32
兆龙电子单片机设计4 小时前
【STM32项目开源】STM32单片机智能家居安防控制系统
stm32·单片机·开源·毕业设计·电子信息
听情歌落俗4 小时前
MPU6050
单片机·嵌入式硬件
d111111111d4 小时前
STM32定时器中断配置详解:以TIM2为例
笔记·stm32·单片机·嵌入式硬件·学习