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

【经验分享】STM32G0学习手册——移植FreeRTOS v202107.00

[复制链接]
STMCU小助手 发布时间:2021-11-8 15:32
1.准备FreeRTOS源文件
1.1、到freertos.org下载最新版本的源文件,链接地址

1.2、FreeRTOS 文件结构如下:

需要用到的是粉色的头文件和翠绿色c文件。

20210630230907158.jpg


2、使用STM32CubeMX生成初始化代码(BSP_Init)
2.1、使能HSE/LSE/SWD/GPIO(引脚数量和外设具体看你需要,这里是点灯用)

2.2、时钟数设置64(MHz),设置工程的文件名,路径,IDE与版本,勾选生成'.c/.h'。生成工程文档

3、复制FreeRTOS文件到工程目录中
3.1、在工程文档根目录下,新建一个文件FreeRTOS,在该目录下新建include和source文件夹

最后看起来目录结构是这样

20210630232103223.png


+FreeRTOS
|+include
|+source

3.2、在FreeRTOS源文件中,把所有的翠绿色.c文件复制到../FreeRTOS/source中

3.3、除了FreeRTOSConfig.h,把所有的粉色.h文件复制到../FreeRTOS/include中

3.4、把头文件stdint.readme改为stdint.h,使用keil打开工程

3.5、新建一个FreeRTOS/source,把所有的c文件添加进去

20210630232815686.png


3.6、把include的目录包含进去。Debug选项里面勾上"Reset and Run"

20210630232918944.png


4、修改代码
4.1、打开stm32g0xx_it.c。注释掉SVC_Handler() / PendSV_Handler() / SysTick_Handler()。因为FreeRTOS里面已经实现过一次

4.2、在main.c添加代码,添加任务

  1. /* USER CODE BEGIN Includes */
  2. #include "FreeRTOS.h"
  3. #include "task.h"
  4. #include "queue.h"
  5. #include "semphr.h"
  6. #include "event_groups.h"
  7. #include "timers.h"

  8. /* USER CODE END Includes */
  9. *
  10. *
  11. *
  12. /* USER CODE BEGIN PV */
  13. static void Send_Task(void* pvParameters);
  14. static void Callback_LEDTOGGLE(void* pvParameters);

  15. static void AppTaskCreate(void);


  16. /*Task Handle*/
  17. static TaskHandle_t AppTaskCreate_Handle=NULL;
  18. static TaskHandle_t Send_Task_Handle=NULL;       //PRO:3


  19. /*Timer handle*/
  20. static TimerHandle_t Timer1=NULL;

  21. static void Callback_LEDTOGGLE(void* pvParameters)
  22. {
  23.   HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_2);

  24. }
  25. /* USER CODE END PV */
  26. *
  27. *
  28. *
  29. int main(void)
  30. {
  31.   /* USER CODE BEGIN 1 */
  32.   BaseType_t xReturn =pdPASS;
  33.   /* USER CODE END 1 */
  34. *
  35. *
  36.   /* Infinite loop */
  37.   /* USER CODE BEGIN WHILE */
  38.           xReturn=xTaskCreate((TaskFunction_t)AppTaskCreate,\
  39.               (const char *)"APPTASKCREATE",\
  40.               (uint16_t)512,(void*)NULL,(UBaseType_t)1,\
  41.               (TaskHandle_t*)&AppTaskCreate_Handle);
  42.   if(pdPASS==xReturn)
  43.     vTaskStartScheduler();
  44.   else
  45.     return -1;
  46.   while (1)
  47.   {
  48.     /* USER CODE END WHILE */
  49.     /* USER CODE BEGIN 3 */
  50.   }
  51.   /* USER CODE END 3 */
  52. }

  53. *
  54. *

  55. /* USER CODE BEGIN 4 */
  56. /***********
  57. *@Function name:SEND_Task
  58. *@description:SEND_Task body
  59. *@Parameter:None
  60. *@return:None
  61. *************/
  62. static void Send_Task(void* pvParameters)
  63. {

  64.   while(1)
  65.   {  
  66.     vTaskDelay(100);         //Just to demonstrate task switching.
  67.   }
  68. }

  69. static void AppTaskCreate(void)
  70. {
  71.   BaseType_t xReturn=pdPASS;
  72.   taskENTER_CRITICAL();

  73.   /* Create Timer1 Handle*/
  74.   Timer1=xTimerCreate((const char*)"1sec-toggle",(TickType_t)pdMS_TO_TICKS(1000),\
  75.                      (UBaseType_t)pdTRUE,(void*)1,(TimerCallbackFunction_t)Callback_LEDTOGGLE);
  76.   if(NULL!=Timer1)
  77.         {}
  78.   xTimerStart(Timer1,0);

  79.   /*SEND task*/
  80.   xReturn=xTaskCreate((TaskFunction_t)Send_Task,\
  81.                       (const char*)"SEND_TASK",\
  82.                       (uint16_t)512,(void*)NULL,(UBaseType_t)3,\
  83.                       (TaskHandle_t*)&Send_Task_Handle);
  84.   if(pdPASS==xReturn)
  85.         {}

  86.   vTaskDelete(AppTaskCreate_Handle);
  87.   taskEXIT_CRITICAL();
  88. }

  89. /* USER CODE END 4 */
复制代码

4.3、编译烧录。


收藏 评论0 发布时间:2021-11-8 15:32

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版