首先就是去官网下载一个源文件:FreeRtos官网
![](https://img-blog.csdnimg.cn/direct/d9b99988386143549d6d9eafc7e09db0.png)
下载下来的是一个zip文件,解压缩了。
![](https://img-blog.csdnimg.cn/direct/4e6fe067526244cb8e4867d1f0a17215.png)
然后再工程文件夹中创建个文件夹:
![](https://img-blog.csdnimg.cn/direct/9fff8855023d4643885ecf35dee8ed22.png)
在这个文件夹中创建3个文件夹:
![](https://img-blog.csdnimg.cn/direct/505b94c77598443ab5d7c4cf55004f76.png)
然后开始把下载下来的文件夹中的文件挑选出来放到我们的工程文件夹中:
![](https://img-blog.csdnimg.cn/direct/ccb2d140940c4501adc36544e5091632.png)
![](https://img-blog.csdnimg.cn/direct/49e03c5f4319447580cb3697d99f2d17.png)
![](https://img-blog.csdnimg.cn/direct/b09e7e47ac1d49358eaa4781bd3a3e2f.png)
![](https://img-blog.csdnimg.cn/direct/44e118d87c0747e4a31fda831768ed79.png)
![](https://img-blog.csdnimg.cn/direct/ead7dcdc6c594a4ba86b03017e6b0874.png)
至此所需要的文件就全部拷贝齐全了,接下来就是在工程中添加各个文件了。
![](https://img-blog.csdnimg.cn/direct/2169f56038124068a6b6e6ebec849895.png)
![](https://img-blog.csdnimg.cn/direct/2a979a22ca304785a2c944da9288d9d8.png)
![](https://img-blog.csdnimg.cn/direct/10a8d2bb1ab5489ea22bafb81799d738.png)
![](https://img-blog.csdnimg.cn/direct/53883630e46549398f8f2dfd12b3469f.png)
最后三个文件夹的文件在工程中的分布如图:
![](https://img-blog.csdnimg.cn/direct/4a41e6a5d85642f5ae956a755738177a.png)
接下来就是主程序了,其实过程就是:
1:声明一个任务句柄。
2:创建一个任务函数。
3:创建一个任务。
4:开启调度器。
cs
#include "stm32f10x.h" // Device header
#include "freertos.h" //包含freeRtos头文件
#include "task.h" //包含task头文件
TaskHandle_t myTaskHandler; //声明一个任务句柄
void myTask( void * arg) //创建一个任务函数
{
while(1) //任务函数就是一个死循环
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //GPIO13口置0
vTaskDelay(500); //延时500
GPIO_SetBits(GPIOC, GPIO_Pin_13); //GPIO13口置1
vTaskDelay(500); //延时500
}
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStruct);
GPIO_ResetBits(GPIOC, GPIO_Pin_13);
/*创建一个任务(第一个参数是任务函数名称,
第二个参数是一个字符串,随便写
第三个参数是任务堆栈大小,我定的是512
第四个参数是任务传递参数,这里暂时不用写NULL
第五个参数是任务优先级,可以随意设置,我设置的是2
第六个参数是任务句柄)*/
xTaskCreate(myTask, "myTask", 512, NULL, 2, &myTaskHandler);
vTaskStartScheduler(); //开启调度器
while(1)
{
}
}
还需要在FreeRTOSConfig.h中添加几行宏定义:
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
![](https://img-blog.csdnimg.cn/direct/1a44454c8a6a4be6a828f2f5b5d3df19.png)
还要在stm32f10x_it.c文件中把刚刚宏定义的三个函数注释掉:107行 126行 135行
![](https://img-blog.csdnimg.cn/direct/491e9e990d8f45119d9659e0ab892c23.png)
至此编译主函数下载到单片机中就能看到PC13的小灯在闪烁了。其他的地方我也不懂呢?今天第一天开始学习。