STM32-FreeRTOS的详细配置

配置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_CORE 和FreeRTOS_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文件中的最一行前添加上必要的中断声明。

    c 复制代码
    #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*类型。创建完成后在函数里面写上以下代码。

    c 复制代码
    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函数中,创建任务,并且启动调度器,代码修改如下。

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

相关推荐
HQB20262 分钟前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
果壳science2 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
南山电子nscn2 小时前
中科芯CETC汽车电池管理系统BMS进口芯片国产型号替代指南
单片机·汽车·bms
沉淀的.晴天2 小时前
can总线
stm32
桀人3 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
国科安芯4 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C4 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
传感器与混合集成电路4 小时前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc4 小时前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
碧海银沙音频科技研究院5 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法