STM32-FreeRTOS的详细配置

发布于:2025-04-18 ⋅ 阅读:(37) ⋅ 点赞:(0)

配置FreeRTOS

原文链接:https://ydamooc.github.io/posts/c9defcd/

1.1 下载FreeRTOS

  1. 打开FreeRTOS官网:https://www.freertos.org/

    请添加图片描述

  2. 点击下载,并且选择"FreeRTOS 202212.01"版本,再点击Download按钮下载官方的资源包。

    请添加图片描述

  3. 下载好资源包后,解压到任意目录,例如我解压到了“G:\FreeRTOS”目录下,由于资源包里面包含的文件较多,解压相对会慢一点,大家需要耐心等待。

    请添加图片描述
    请添加图片描述

  4. 解压完成后,我们打开FreeRTOS文件夹中的FreeRTOSv202212.01文件夹,打开后可以看到里面有很多文件和文件夹,其中我们要使用的是FreeRTOS文件夹中的东西。

请添加图片描述

1.2 配置相关的文件

  1. 随后打开FreeRTOS文件夹,我们在这里面需要关注的是Source文件夹中的内容,以及Demo文件夹中的内容(后续会使用到其中的文件)。我们打开Source文件夹,在当前目录下,我们需要保留这一部分的文件,其他用不到可以删除掉。

    请添加图片描述
    请添加图片描述

  2. 接着再打开portable文件夹,在当前目录下,我们需要保留这一部分的文件,其他用不到可以删除掉。其中MemMang文件夹中存放的是内存管理的相关文件,RVDS文件夹中存放的各个内核相关的文件,我们这里使用的是STM32F103C8T6单片机,所以我们需要的是ARM_CM3文件夹中的内容,其他用不到可以删除掉。

请添加图片描述
在这里插入图片描述

在这里插入图片描述

  1. 因为我们使用的是STM32F103C8T6单片机,在Source文件夹中还缺少FreeRTOS相关的配置文件,我们回到"FreeRTOSv202212.01\FreeRTOS"目录下,然后打开Demo文件夹,在里面找到CORTEX_STM32F103_Keil项目打开,将里面的FreeRTOSConfig.h文件复制到前面的Source文件夹中。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 接下来我们需要打开一个空白的STM32工程文件,本文使用的空白工程文件来自于立创开发板的地阔星STM32F103C8T6资料中的空白工程模板,大家可以自行点击下载地阔星资料。当然使用别的空白工程模板也是可以的,只要能正常编译即可。

    在这里插入图片描述

  2. 下载解压后,打开第03章【立创·STM32F103C8T6开发板】软件资料中的空白工程模板文件夹,然后将里面的STM32F103C8T6_ProjectTemplate.zip解压到任意目录下,解压完成后,将名字修改成FreeRTOS_ProjectTemplate,方便后续操作。

    在这里插入图片描述

  3. 接着在FreeRTOS_ProjectTemplate中创建一个名为FreeRTOS的文件夹,然后回到"FreeRTOSv202212.01\FreeRTOS\Source"目录下,将前面我们保留的Source文件夹中的内容复制到FreeRTOS_ProjectTemplate中的FreeRTOS文件夹中。

    在这里插入图片描述

    在这里插入图片描述

1.3 配置Keil中的STM32代码

  1. FreeRTOS_ProjectTemplate中,根据下面路径,打开项目。打开后,我们先编译一次项目。

    在这里插入图片描述

    在这里插入图片描述

  2. 接着我们为项目创建文件夹,分别为FreeRTOS_COREFreeRTOS_PORT,然后根据下图,将相关的文件添加进这两个文件夹中。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  3. 添加完文件之后,打开魔术棒,然后点击C/C++选项卡,将FreeRTOS文件夹中的.h路径添加进去。

    在这里插入图片描述

  4. 由于需要对stm32f10x_it.c文件进行修改,而在项目中是没有添加进去的,我们需要手动添加一下,该文件所在路径是FreeRTOS_ProjectTemplate\module,所以我们在左侧右键MODULE文件夹,然后选择Add Files to Group ‘MODULE’,然后选择stm32f10x_it.c文件添加进去。添加完之后需要编译一下,确保没有问题。

    在这里插入图片描述

    在这里插入图片描述

  5. 接着在左侧打开FreeRTOS_CORE文件夹,打开FreeRTOSConfig.h文件,在第49行处,将原来的171024修改成101024。

    在这里插入图片描述

  6. FreeRTOSConfig.h文件中的最一行前添加上必要的中断声明。

    #define xPortPendSVHandler  PendSV_Handler 
    #define vPortSVCHandler SVC_Handler
    #define xPortSysTickHandler SysTick_Handler
    

    在这里插入图片描述

  7. stm32f10x_it.c文件中,找到SVC_Handler函数、PendSV_Handler函数和SysTick_Handler函数,将原来的代码注释掉,并且在main.c中添加上头文件,然后编译。

    请添加图片描述

    请添加图片描述

1.4 对配置好的工程进行测试

  1. main.c文件开头创建一个任务句柄,并且创建一个任务函数,任务函数的形参必须为void*类型。创建完成后在函数里面写上以下代码。

    请添加图片描述

    void myTask(void* pv)
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        GPIO_ResetBits(GPIOC,GPIO_Pin_13);
        
        while(1)
        {
            GPIO_SetBits(GPIOC, GPIO_Pin_13);
            vTaskDelay(1000);
            
            GPIO_ResetBits(GPIOC, GPIO_Pin_13);
            vTaskDelay(1000);
        }
    }
    
  2. main函数中,创建任务,并且启动调度器,代码修改如下。

    int main(void)
    {
        board_init();
    
        xTaskCreate(myTask, "myTask", 1024, NULL, 2, &myTaskHandler);
        vTaskStartScheduler();
    
        while(1)
        {
    
        }
    }
    
  3. 编译通过后,将程序下载到开发板中,可以看到LED灯每隔1秒闪烁一次,至此说明FreeRTOS相关的配置已经配置完成。

请添加图片描述


网站公告

今日签到

点亮在社区的每一天
去签到