【前言】

freertos是最常用的操作系统。移植它有好几种方式。一是使用源码配置,从官网下载源码,然后手工添加到工程中,比较复杂。二是使用mdk中的pack包,直接导入,然后配置tick。也比较简单。三是使用stm32cube X-cbue-freertos包,可以使用图形化配置,相对于说是最友好的一种配置。本篇将分享如何使用stm32cubeMX来实现freertos的移植。
【实施步骤】
1、在stm32cubeMX下载x-cube-freertos包。
 


安装好后就可以在工程中启用与配置了。
2、开启x-cube-freertos
 


保持黙认配置即可。
3、添加任务
 


到此配置结束
4、由于freertos默认使用systick来做为心跳,那莫与他跟sys是有冲突的(即HAL_Tick),如果不修改就会出现问题。因此我们需要在sys中修改心跳为tim。
 


5、当我们给sys配置为TIM6时,由于他的中断级别跟systick是一样的,如果他的中断比较低的话,那莫在有些外设配置的hal库中如果用到了hal_tick_get就会取不到tick导至卡死或者超时。因此需要修改一下他的中断级别:
 


【测试】
我这里添加了开发板上的两个led分别为led2\led3。
生成工程后在app_freertos.c中分别翻转。

复制


  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(LED3_GPIO_Port,LED3_Pin);
  9.     osDelay(200);
  10.   }
  11.   /* USER CODE END defaultTask */
  12. }
  13. /* USER CODE BEGIN Header_StartLEDTask */
  14. /**
  15. * [url=/u/brief]@brief[/url] Function implementing the ledTask thread.
  16. * @param argument: Not used
  17. * @retval None
  18. */
  19. /* USER CODE END Header_StartLEDTask */
  20. void StartLEDTask(void *argument)
  21. {
  22.   /* USER CODE BEGIN ledTask */
  23.   /* Infinite loop */
  24.   for(;;)
  25.   {
  26.                 HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
  27.     osDelay(500);
  28.   }
  29.   /* USER CODE END ledTask */
  30. }

【实验现象】
编译下载后,可以看到LED2与LED3分别以不同的频率闪烁。

 


---------------------
作者:lulugl
链接:https://bbs.21ic.com/icview-3520353-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐