[STM32U5] 【NUCLEO-U5A5ZJ-Q测评】轻松移植FreeRTOS

[复制链接]
2025|3
 楼主| lulugl 发表于 2023-11-13 15:52 | 显示全部楼层 |阅读模式
#申请原创#[url=home.php?mod=space&uid=760190]@21小跑堂 [/url]
【前言】stm32U5系列默认是没有freertos的配置,需要自己安装freertos包,当然大家也可以自己通过源码安装。但是安装stm32的freertos包,在工程管理方面要简单得很多,stm32CubeIDE可以轻松的帮开发者配置相关的代码。
【开发环境】
win11
Stm32CubeIDE 1.13版本
【开发板】
NUCLEO-U5A5ZJ-Q
【freertos软件包安装】
1、stm32CbudeMAX设计界面,按alt+o可以打开软件包的管理界面。
2b96efb15d13633efdc633bd5412bcd3
按下图选择freertos的版本,然后点击安装。
b91f58975558527cb872efadff4e001b
在stm32CubeMax界面我们在中间件中找到X-CUBE-FREERTOS,选中后钩选CMSIS RTOS2。
f34174d01500701f56ac08ee90f5f6d3
按alt+K,自动生成代码。freertos默认生成的任务函数是在Core/Src下的app_freertos.c下面。
710c7c91a73c1377a2311778d95a9923
编写任务示例示代码:
此次代码是在我们面的驱动LCD的代码基础上添加的。【NUCLEO-U5A5ZJ-Q测评】硬件SPI驱动LCD屏 - STM32/STM8单片机论坛 - ST MCU意法半导体官方技术支持论坛 - 21ic电子技术开**坛
首选在任务startDefaultTask任务中添加一个led闪烁的代码:
  1. /* USER CODE END Header_StartDefaultTask */
  2. void StartDefaultTask(void *argument)
  3. {
  4.   /* USER CODE BEGIN defaultTask */
  5.   /* Infinite loop */
  6.   for(;;)
  7.   {
  8.         HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin);
  9.     osDelay(500);
  10.   }
  11.   /* USER CODE END defaultTask */
  12. }

其次在任务2中添加系统运行的显示代码。
/* USER CODE END Header_StartTask02 */
void StartTask02(void *argument)
{
  /* USER CODE BEGIN myTask02 */
  uint8_t show_str[20];
  uint32_t mytick;

  /* Infinite loop */
  for(;;)
  {
          mytick = HAL_GetTick();
          sprintf(show_str,"run times:%d",mytick/1000);
        ILI9488_printText(show_str,10,40,ILI9488_BLACK,ILI9488_WHITE,2);
    osDelay(1000);
  }
  /* USER CODE END myTask02 */
}


【实验效果】
任务1每500ms闪烁一次,任务2在LCD屏中输出系统运行的时间


Tristan_C 发表于 2023-12-12 10:09 | 显示全部楼层
开发工具做得越来越方便了
laocuo1142 发表于 2023-12-12 14:28 | 显示全部楼层
讲解的很详细
 楼主| lulugl 发表于 2023-12-12 14:28 | 显示全部楼层

多谢大佬的关注,我一直在努力之中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

188

主题

843

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部