百度网盘里给的FreeRTOSConfig.h文件不是很全面,可以下载我绑定的资源里的FreeRTOSConfig.h,那里面更全面。
准备好FreeRTOS源码文件夹和标准库工程模板。
FreeRTOS移植资料https://pan.baidu.com/s/1Ezk-B-y0R8-dobE6wdNMlQ?pwd=1234
步骤:
1.在工程模板中新建一个“FreeRTOS”文件夹
2.在“FreeRTOS”文件夹中新建“src”“inc”“port”3个文件夹;
src:存放源码 inc:存放头文件 port:存放移植平台的相关文件
3.复制FreeRTOSv202212.01\FreeRTOS\Source\portable\MemMang中的所有文件到port文件夹中
4.复制FreeRTOSv202212.01\FreeRTOS\Source\portable\RVDS\ARM_CM3中的所有文件到port文件夹中
5.复制FreeRTOSv202212.01\FreeRTOS\Source中的文件夹以外的所有单独文件至src
6.复制FreeRTOSv202212.01\FreeRTOS\Source\include中所有文件至inc
7."C:\Users\W\Desktop\FreeRTOSv202212.01\FreeRTOS\Demo\CORTEX_STM32F103_Keil\FreeRTOSConfig.h"复制到FreeRTOS_工程模板\FreeRTOS文件夹下
所有复制内容已完成。
8.用KEIL打开工程点击魔术棒,把4个文件夹全部添加进来:
9.新建组,把文件添加进来:
SRC:添加所有src文件夹下的文件
INC:添加inc文件夹下除了readme之外的所有文件
PORT:添加heap_4.c和port.c文件
10.在FreeRTOS/INC组中添加FreeRTOSConfig.h文件。并将其移动到最顶端,方便之后使用。
11.注释掉stm32f10x_it.c文件中的3个空的中断函数:
//void SVC_Handler(void)
//{
//}
//void PendSV_Handler(void)
//{
//}
//void SysTick_Handler(void)
//{
//}
13.在FreeRTOSConfig.h文件的#endif之前加上:
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
12. 复制以下代码到main.c,编译运行,可以看到PB5上的LED每500毫秒闪烁一次,可以插一个LED上去试试。
#include "stm32f10x.h"
#include "FreeRTOS.h"
#include "task.h"
TaskHandle_t myTaskHandler;
void myTask( void * arg)
{
while(1)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
vTaskDelay(500);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
vTaskDelay(500);
}
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
xTaskCreate(myTask,"myTask",512,NULL,2,&myTaskHandler);
vTaskStartScheduler();
while(1)
{}
}