[CW32F030系列] 【CW32F030CxTx StartKit测评】 freeRTOS移植

[复制链接]
 楼主| tlled 发表于 2022-7-2 11:22 | 显示全部楼层 |阅读模式
<
本帖最后由 tlled 于 2022-7-2 11:23 编辑

    在前两篇对芯片CW32F030的时钟和串口学习之后,下面尝试着移植freeRTOS系统到开发板,记录过程如下。

    一、freeRTOS源码下载

    1.1、下载地址:
     官网:https://www.freertos.org/   或者   https://sourceforge.net/projects/freertos/files/FreeRTOS/

    1.2、freeRTOS文件
    下面就是下载的源文件和解压后的文件
    001.png

    二、创建项目工程

    首先要准备好,已经编译好的工程文件,在这个工程文件的基础上,在增加freeRTOS源码文件

    2.1、复制freeRTOS源文件

    2.1.1、将source文件复制到之前创建的工程项目中
    003.png

    2.1.2、删除文件
     将下面三个文件之外的其他文件夹删除。
    002.png

    2.1.3、freeRTOS配置文件
    需要一起复制下面的文件
    005.png

    2.2、添加源码到工程项目
    将上面是文件添加到工程项目中
    004.png

    2.3、主程序

  1. #include "main.h"
  2. #include "cw32f030_flash.h"
  3. #include <stdio.h>
  4. #include "FreeRTOS.h"
  5. #include "task.h"
  6. #include "led.h"
  7. #include "usart.h"


  8. TaskHandle_t StartTask_Handler;

  9. void start_task(void *pvParameters)
  10. {
  11.         int i=1;
  12.         while(1)
  13.         {
  14.                 led1_tog();
  15.                 printf("task1 run \r\n");
  16.                 vTaskDelay(1000);
  17.         }
  18. }

  19. void led_task(void *pvParameters)
  20. {
  21.         int i=1;
  22.         while(1)
  23.         {
  24.                 led2_tog();
  25.                 printf("task2 run \r\n");
  26.                 vTaskDelay(500);
  27.         }
  28. }

  29. void rcc_config(void)
  30. {
  31.         uint8_t res = 0U;
  32.         RCC_AHBPeriphClk_Enable(RCC_AHB_PERIPH_FLASH, ENABLE);   //打开FLASH时钟
  33.         //RCC_HCLK_OUT();                                                         //通过PA04观察HCLK频率
  34.         RCC_HSE_Enable( RCC_HSE_MODE_OSC, 16000000, RCC_HSE_DRIVER_NORMAL, RCC_HSE_FLT_CLOSE ); //开启外部高速时钟HSE,实际频率需要根据实际晶体频率进行填写
  35.                
  36.         RCC_PLL_Enable( RCC_PLLSOURCE_HSEOSC, 16000000, RCC_PLL_MUL_3 );     //开启PLL,PLL时钟来源为HSE
  37.         FLASH_SetLatency(FLASH_Latency_2);    //频率大于24M需要配置FlashWait=2
  38.         res = RCC_SysClk_Switch( RCC_SYSCLKSRC_PLL );                        //切换系统时钟到PLL
  39.         if( res == 0x0U )                                                    //切换系统时钟成功
  40.         {
  41.                 RCC_HSI_Disable();                                               //切换时钟到PLL后关闭源时钟HSI
  42.         }
  43. }


  44. int32_t main(void)
  45. {
  46.         
  47.         rcc_config();
  48.         uart_init(115200);
  49.         init_led();
  50.         printf("\r\nfreeRTOS test!\r\n");
  51.         
  52.         xTaskCreate((TaskFunction_t)start_task,
  53.                                                         (const char*   )"satrt_task",
  54.                                                         (uint16_t                         )128,
  55.                                                         (void*         )NULL,
  56.                                                         (UBaseType_t   )1,
  57.                                                         (TaskHandle_t* )&StartTask_Handler);
  58.                                                         
  59.         xTaskCreate((TaskFunction_t)led_task,
  60.                                                         (const char*   )"led_task",
  61.                                                         (uint16_t                         )128,
  62.                                                         (void*         )NULL,
  63.                                                         (UBaseType_t   )2,
  64.                                                         (TaskHandle_t* )&StartTask_Handler);
  65.         
  66.         vTaskStartScheduler();
  67.         
  68. }


     三、编译项目

     3.1、编译上面创建好的项目,首次编译后会提示下面错误,需要配置freeRTOS
    006.png

    3.2、修改FreeRTOSConfig.h
    我这里修改时钟和存储空间如下。再次编译就没有错误了。
    007.png

    3.3、烧写代码
    上面编译后烧写到开发板上运行,发现程序运行不对。
    008.png    

    3.4、修改启动文件
    修改下面的中断函数为freeRTOS系统的函数
    009.png
    重新编译再运行

    四、程序运行

    下载后重新运行,串口输出内容
    010.png

    开发板上指示灯运行。
    200.gif

    五、工程文件

    cw32f030_freeRTOS_prj-20220702.rar (2.18 MB, 下载次数: 35)


    上面就是我创建freeRTOS项目的过程。

chenjun89 发表于 2022-7-3 10:36 来自手机 | 显示全部楼层
恭喜楼主喜提开发板,板子看起来很简洁啊。
koala889 发表于 2022-7-3 11:28 | 显示全部楼层
为啥要删除那三个文件夹
 楼主| tlled 发表于 2022-7-4 09:06 | 显示全部楼层
koala889 发表于 2022-7-3 11:28
为啥要删除那三个文件夹

要保留这三个文件夹
koala889 发表于 2022-7-6 22:13 | 显示全部楼层
tlled 发表于 2022-7-4 09:06
要保留这三个文件夹

哦哦,看乱了~~
daichaodai 发表于 2022-7-7 08:01 来自手机 | 显示全部楼层
谢谢分享,下载看看。
Bowclad 发表于 2022-9-5 21:47 | 显示全部楼层
这个好,刚好需要
fentianyou 发表于 2022-9-8 20:10 | 显示全部楼层
CW32F030CxTx 不错啊。   
febgxu 发表于 2022-9-8 20:36 | 显示全部楼层
这个freeRTOS有教程吗?   
ccook11 发表于 2022-9-10 19:10 | 显示全部楼层
可以移植rtthread吗   
olivem55arlowe 发表于 2022-11-2 17:31 | 显示全部楼层
freeRTOS占用多大的ram?
1988020566 发表于 2022-11-2 17:51 | 显示全部楼层
CW32F030CxTx可以运行哪些操作系统呢?
houjiakai 发表于 2022-11-2 18:45 | 显示全部楼层
freeRTOS需要注意哪些问题呢?
jackcat 发表于 2022-12-4 21:03 | 显示全部楼层
怎么确定freeRTOS移植成功?
yeates333 发表于 2022-12-5 20:48 | 显示全部楼层
freeRTOS互斥变量怎么搞?
mnynt121 发表于 2022-12-6 14:30 | 显示全部楼层
这个是不是兼容stm32的芯片呢?
usysm 发表于 2022-12-6 16:50 | 显示全部楼层
freeRTOS比ucos强吗?
wangdezhi 发表于 2022-12-6 18:00 | 显示全部楼层
freeRTOS的汇编怎么修改?
cashrwood 发表于 2022-12-10 11:06 | 显示全部楼层
是否有freeRTOS跟物联网连接的代码呢?
1988020566 发表于 2022-12-12 09:32 | 显示全部楼层
这个可以,freeRTOS教程很多。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

701

帖子

7

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