你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32H5 评测】2、Keil中添加RTX5 RTOS和Event Record

[复制链接]
EPTmachine 发布时间:2026-10-17 23:21

Keil是嵌入式开发中常用的开发工具,Keil集成有CubeMX工具用于STM32 MCU的外设管理,Keil中集成的EventRecorder组件,搭配Keil的图形化界面,能对RTX5 RTOS的事件进行监控。

1、Keil中创建芯片工程

NUCELO-H5E5ZJ开发板的芯片型号为STM32H5E5ZJT6,创建Keil工程时根据芯片型号创建工程。

Select_MCU_Part_Num.png

Keil中提供Run-Time Enviroment管理工具用软件组件的配置,其中集成有CubeMX,并会检查相关的依赖项,添加CubeMX支持,并根据提示解决依赖项。

Keil_RTE_Add_CubeMx.png

启动CubeMX配置MCU相关的外设,查看开发的原理图

LED_Schematic.png

控制LED的引脚如下

LED MCU IO
LD1 PA3
LD2 PF0
LD3 PE5

配置LED引脚为GPIO输出

Config_LED_Button.png

2、添加RTX5和EventRecoder组件

通过RTE工具添加RTX5 RTOS和Event Recorder组件

Add_RTX5_EventRecorder.png 修改RTX_Config.h中的线程运行的优先级模式为"Privileged Mode"特权模式,否则RTX5无法正常运行

Thread_execution_Processor_Mode.png

并使能RTX5 RTOS的Event Recorder组件支持

Enable_RTX_config.png

由于RTOS调用需要SVC、PendSV和Systick中断服务,RTX5组件定义这三个中断的实现,CubeMX中关闭三个中断函数的代码生成,避免重定义的错误。

RTOS_Irq_Redefine_Resolve.png

RTOS_Handler_Redefine.png

3、创建线程和RTOS运行监控

创建三个不同的线程用于控制LED的翻转,并初始化Event Recorder用于监控RTOS的运行情况。

const osThreadAttr_t ThreadLED1_Attr = 
{
    .name = "osLED1Thread",
    .attr_bits = osThreadDetached, 
    .priority = osPriorityNormal5,
    .stack_size = 1024,
};

const osThreadAttr_t ThreadLED2_Attr = 
{
    .name = "osLED2Thread",
    .attr_bits = osThreadDetached, 
    .priority = osPriorityNormal4,
    .stack_size = 2048,
};

const osThreadAttr_t ThreadLED3_Attr = 
{
    .name = "osLED3Thread",
    .attr_bits = osThreadDetached, 
    .priority = osPriorityNormal4,
    .stack_size = 2048,
};


osThreadId_t ThreadIdTaskLED1 = NULL;
osThreadId_t ThreadIdTaskLED2 = NULL;
osThreadId_t ThreadIdTaskLED3 = NULL;

void AppTaskLED1(void *argument);
void AppTaskLED2(void *argument);
void AppTaskLED3(void *argument);

void AppTaskLED1(void *argument)
{
    (void)argument;
    HAL_ResumeTick();

    while(1)
    {
        osDelay(500);
        HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
    }
}


void AppTaskLED2(void *argument)
{
    (void)argument;

    while(1)
    {
        osDelay(1000);
        HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    }
}

void AppTaskLED3(void *argument)
{
    (void)argument;

    while(1)
    {
        osDelay(1500);
        HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);
    }
}

int main(void)
{


    HAL_SuspendTick();
    EventRecorderInitialize(EventRecordAll, 1U);
    EventRecorderStart();

    osKernelInitialize();                                  

    ThreadIdTaskLED1 = osThreadNew(AppTaskLED1, NULL, &ThreadLED1_Attr);  
    ThreadIdTaskLED2 = osThreadNew(AppTaskLED2, NULL, &ThreadLED2_Attr);
    ThreadIdTaskLED3 = osThreadNew(AppTaskLED3, NULL, &ThreadLED3_Attr);    

    osKernelStart();

}

4、Keil中监控RTOS运行

调试器配置界面中,使能Trace功能

Debuger_Trace_Config.png

View视图中使能Analysis Windows菜单中的System Analyer和Event Recorder 窗口,调试程序时,查看RTX5对应的事件信息。

Enable_EvnerRecorder_Windows.png

赞 收藏 评论0 发布时间:2026-10-17 23:21

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版