FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植


一、前言

        本文主要讲如何将FreeRTOS+ST3.5库通过MDK-ARM上移植到STM32F103系列的板子上。达到使用FreeRTOS创建任务并调度任务的目的。关于FreeRTOS的更多操作不做过多讨论(暂时我还没有探索太深)。

        将中断服务程序的映射放到FreeRTOSConfig.h中,是一个较好的移植方式。避免修改startup_stm32f10x_hd.s文件。保持了st库的完整。

二、准备

        FreeRTOS9.0.0:下载后是一个"FreeRTOSv9.0.0.exe"自解压文件,双击将其解压备用。

                        下载路径:https://sourceforge.net/projects/freertos/files/FreeRTOS/

        MDK-ARM5.24:其他MDK-ARM版本也可以

        STM32F10x_StdPeriph_Lib_V3.5.0:下载是一个压缩文件,将其解压备用。

                        下载路径:http://www.openedv.com/posts/list/6054.htm

三、建立MDK工程

        如果已有一个干净的工程模板可以跳过该章。

        1、新建工程

            建立E:\STM32\FreeRTOS_Templet文件夹,文件夹下的目录结构如下:

                     FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第1张图片

            打开MDK,Project->New uVision Project。将新工程放到Project目录下。工程名称为FreeRTOS_Templet。Device选择STM32F103VE。

        2、为工程添加除FreeRTOS外的基本文件

            a、App文件夹下建立以下三个文件,先不写内容:

                        

            b、STM32F10xLib_V3.5.0文件夹

            在解压的\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries下将Libraries内的两个文件夹复制到第一章建立的STM32F10xLib_V3.5.0文件夹下,并在解压的\Project\STM32F10x_StdPeriph_Template文件夹下将看到的“.h”、“.c”文件复制到第一章建立的STM32F10xLib_V3.5.0文件夹下。完成后STM32F10xLib_V3.5.0文件夹下如下所示:

                        FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第2张图片

四、工程配置

        1、增加头文件目录,如下如所示。

              FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第3张图片

        2、填写预定于符号,如下图所示。

              FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第4张图片

        3、将目录下的文件加入工程管理,如下所示:

                FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第5张图片

        4、填写main.c  project.c project.h

            main.c     

/*
	*************************************************************
	* @file     main.c
	* @brief    
	* @author   yanghailei
	* @date     2018-05-06 
	* @version  V1.00
	* @par Copyright (c):  yanghailei
	* @par History:          
*/
#include 	"project_conf.h"

int main()
{
	
}

        project_conf.c

/*
	*************************************************************
	* @file     project_conf.c
	* @brief    
	* @author   yanghailei
	* @date     2018-05-06 
	* @version  V1.00
	* @par Copyright (c):  yanghailei
	* @par History:          
*/  
#include 	"project_conf.h"

        project_conf.h

/*
	*************************************************************
	* @file     project_conf.h
	* @brief    
	* @author   yanghailei
	* @date     2018-05-06 
	* @version  V1.00
	* @par Copyright (c):  yanghailei
	* @par History:          
*/
#ifndef 	__PROJECT_CONF_H
#define 	__PROJECT_CONF_H
#include "stm32f10x.h"
#endif

五、添加FreeRTOS到工程

            1、提取FreeRTOS文件

                将第一章解压的FreeRTOSv9.0.0\FreeRTOS\Source文件夹放到工程目录FreeRTOS下。            

           将第一章解压的FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_Keil\FreeRTOSConfig.h放到工程目录FreeRTOS下。如下所示:

                

            2、删除多余的FreeRTOS文件

                进入工程目录G:\STM32\FreeRTOS_Yang\FreeRTOS\Source\portable。删除其他文件夹。结果如下所示:

                FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第6张图片

           3、将工程目录下的文件加入工程,如下所示:

                FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第7张图片

            4、修改头文件目录,如下所示:

                FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第8张图片

                5、修改main.c,如下所示:

/*
	*************************************************************
	* @file     main.c
	* @brief    
	* @author   yanghailei
	* @date     2018-05-06 
	* @version  V1.00
	* @par Copyright (c):  yanghailei
	* @par History:          
*/
#include 	"project_conf.h"


void vAppTask1(void *pvParameters)
{
	while(1){
		vTaskDelay(200);
	}
}

void AppTaskCreate(void)
{
	xTaskCreate(vAppTask1, "Task1", 50, NULL, 1, NULL);
}


int main()
{
	AppTaskCreate();
	vTaskStartScheduler();
}

            6、修改project_conf.h,在其中增加FreeRTOS的头文件。

/*
	*************************************************************
	* @file     project_conf.h
	* @brief    
	* @author   yanghailei
	* @date     2018-05-06 
	* @version  V1.00
	* @par Copyright (c):  yanghailei
	* @par History:          
*/

#ifndef 	__PROJECT_CONF_H
#define 	__PROJECT_CONF_H

#include "stm32f10x.h"
#include "FreeRTOSConfig.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "list.h"
#include "portable.h"


#endif

            7、修改FreeRTOSConfig.h文件,在最后增加如下三个宏定义:

            FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第9张图片

            8、编译测试

                编译后,提示如下三个错误。是由于我们stm32f10x_it.c内已经存在三个函数的定义。将stm32f10x_it.c中的三个函数注释掉即可。


              至此可以将程序下载到板子上,测试了。

六、软件仿真

            如果没有STM32板子,我们可以通过软件仿真测试程序是否移植成功。

            1、设置MDK为仿真模式,在Debug界面,选择Use Simulator。Dialog DLL及Parameter修改成如下:

                FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第10张图片

            2、启动软件仿真

                 Ctrl+F5启动仿真,在vAppTask1可以看到程序隔段时间便进入。至此可以确认移植成功。

FreeRTOS9.0+STM32F10x_StdPeriph_Lib_V3.5.0在MDK5.24环境下的移植_第11张图片

你可能感兴趣的:(STM32开发)