[AT32F405] 【AT-START-F405测评】--3.上FreeRTOS系统运行

[复制链接]
 楼主| dirty123 发表于 2024-4-26 00:07 | 显示全部楼层 |阅读模式
本帖最后由 dirty123 于 2024-4-26 00:10 编辑

      本篇讲述AT-START-F405开发板FreeRTOS系统移植运行。由于官方已经做好了demo,这里主要讲下移植与系统运行测验。

一.FreeRTOS系统移植
      开发板MCUAT32F405RCT7-7微控制器,ARM Cortex-M4核,96+6KB RAM,256KB Flash ,资源是足够FreeRTOS系统移植的。
1.打开官方SDK里FreeRTOS工程如下。路径:AT32F402_405_Firmware_Library_V2.0.7\utilities\at32f402_405_freertos_demo
1_FreeRTOS工程.jpg
图1:FreeRTOS系统工程

2.在at32f402_405_int.c里屏蔽SVC_Handler,PendSV_Handler,SysTick_Handler
2_屏蔽函数.jpg
图2:屏蔽函数

3.定义引用系统时钟。在FreeRTOSConfig.h里有系统时钟频率configCPU_CLOCK_HZ宏定义,随时间节拍提供系统心跳
4.在main函数创建系统任务,启动调度器。
  1. int main(void)
  2. {
  3.   system_clock_config();

  4.   nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);

  5.   /* init led2 and led3 */
  6.   at32_led_init(LED2);
  7.   at32_led_init(LED3);

  8.   /* init usart1 */
  9.   uart_print_init(115200);

  10.   /* enter critical */
  11.   taskENTER_CRITICAL();

  12.   /* create led2 task */
  13.   if(xTaskCreate((TaskFunction_t )led2_task_function,
  14.                  (const char*    )"LED2_task",
  15.                  (uint16_t       )512,
  16.                  (void*          )NULL,
  17.                  (UBaseType_t    )2,
  18.                  (TaskHandle_t*  )&led2_handler) != pdPASS)
  19.   {
  20.     printf("LED2 task could not be created as there was insufficient heap memory remaining.\r\n");
  21.   }
  22.   else
  23.   {
  24.     printf("LED2 task was created successfully.\r\n");
  25.   }
  26.   /* create led3 task */
  27.   if(xTaskCreate((TaskFunction_t )led3_task_function,
  28.                  (const char*    )"LED3_task",
  29.                  (uint16_t       )512,
  30.                  (void*          )NULL,
  31.                  (UBaseType_t    )2,
  32.                  (TaskHandle_t*  )&led3_handler) != pdPASS)
  33.   {
  34.     printf("LED3 task could not be created as there was insufficient heap memory remaining.\r\n");
  35.   }
  36.   else
  37.   {
  38.     printf("LED3 task was created successfully.\r\n");
  39.   }

  40.   /* exit critical */
  41.   taskEXIT_CRITICAL();

  42.   /* start scheduler */
  43.   vTaskStartScheduler();
  44. }
任务函数
  1. /* led2 task function */
  2. void led2_task_function(void *pvParameters)
  3. {
  4.   while(1)
  5.   {
  6.     at32_led_toggle(LED2);
  7.       printf("LED2 led_toggle\r\n");
  8.     vTaskDelay(1000);
  9.   }
  10. }

  11. /* led3 task function */
  12. void led3_task_function(void *pvParameters)
  13. {
  14.   while(1)
  15.   {
  16.     at32_led_toggle(LED3);
  17.       printf("LED3 led_toggle\r\n");
  18.     vTaskDelay(500);
  19.   }
  20. }

二.编译烧录运行
      编译烧录运行后,可看到系统跑起来了。LED灯交替闪烁。
3_日志.jpg
图3:FreeRTOS运行日志


      至此,AT-START-F405开发板成功运行FreeRTOS系统。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

135

帖子

1

粉丝
快速回复 返回顶部 返回列表