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