建立一个商城网站,聊城职业 网站建设与管理,广东东莞自己建站教程,百度官方版下载我在查找FreeRTOS移植的相关教程特别少#xff0c;所以想非常详细的介绍FreeRTOS移植stm32详细步骤#xff0c;包括源码的下载#xff0c;源码介绍#xff0c;系统移植#xff0c;代码验证等#xff0c;每一步都有对应的介绍和解释#xff0c;希望可以帮助到你们。 文章… 我在查找FreeRTOS移植的相关教程特别少所以想非常详细的介绍FreeRTOS移植stm32详细步骤包括源码的下载源码介绍系统移植代码验证等每一步都有对应的介绍和解释希望可以帮助到你们。 文章目录 1. FreeRTOS源码的下载2. FreeRTOS源码介绍3. FreeRTOS系统移植4. 系统代码验证 1. FreeRTOS源码的下载
官网下载仓库下载镜像下载百度网盘下载私信我 1.1 可以直到FreeRTOS官网去下载,【FreeRTOS官网传送门】但是下载速度很慢不翻墙的话不建议使用这个方法下载。
1.1.1 官网页面如下点击右上角或下方的下载入口 1.1.2 进入下载页面有两个下载选项
第一个选项是FreeRTOS 202212.01下载的数据包包含最新 FreeRTOS 内核、 FreeRTOS-Plus 库 和 AWS IoT 库以及示例项目第二个选项是FreeRTOS 202210.01 LTS数据包包含 FreeRTOS LTS 库其中包括 FreeRTOS 内核和 IoT 库但没有示例项目
一般我们下载第一个就行 1.2 直接通过仓库下载【仓库地址传送门】同样很慢甚至打不开网页也不建议使用这种方法。 1.3 通过国内镜像下载这种方式下载不受域名影响是最直接的方式 【国内镜像传送门】建议使用 1.3.1 打开链接页面 1.3.2 点击下载/克隆下载成功 1.4 使用我上传到百度网盘的源码是在官方网站直接下载的数据包建议使用起码比官网和仓库快
链接【百度网盘传送门】 提取码sqml 1.5 以上方式都不行的可以直接私信我
下载好的压缩包解压好的文件呀包含下面的内容
压缩包88.3MB解压文件夹506MB 2. FreeRTOS源码介绍
前面的文章已经很详细介绍过了可以直达前面的文章去了解源码结构可以更好的帮助你理解移植的原理和FreeRTOS的实现原理。
博客传送门【FreeRTOS】详细目录结构和作用
基本上可以概括为下面一张图 3. FreeRTOS系统移植
3.1 准备好FreeRTOS源码和一个配置好的STM32项目工程我使用的是之前一个已经成功实现的LED闪烁的工程 3.2 在项目工程中创建一个FreeRTOS文件夹里面存放所有的移植文件 3.3 在刚才创建的FreeRTOS文件夹中分别新建src、inc、port文件夹
src文件夹用来存放源码inc文件夹用来存放头文件port文件夹用来存放移植平台的相关文件 3.4 接下来我们将FreeRTOS源码的移植到我们新建的文件夹中
3.4.1首先我们打开源码中的Soure文件夹中的protable文件夹找到MemMang文件夹这个文件夹中都是内存管理文件我们只用到heap_4.c文件将其复制到port文件夹中 3.4.2 接着我们在刚才的portable文件夹中找到RVDS文件夹选择里面的ARM_M3中的port.c和portmacro.h两个文件也复制到我们的工程文件port文件夹中 3.4.3 回到source文件夹中将这个文件夹中的.c文件全部复制到工程新建的src文件夹中 3.4.4 在source文件夹中的include文件夹里全部都是FreeRTOS的头文件将其添加到工程新建的inc文件夹中 3.4.5 添加一个配置文件在FreeRTOS文件夹中的demo文件夹中找到CORTEX_STM32F103_Keil文件夹复制里面的FreerRTOSConfig.h文件到新建的FreeRTOS文件夹中 3.5 接着我们添加文件路径打开keil软件点击魔术棒进入C/C在Include Paths中添加文件路径将FreeRTO、src、inc、port的路径全部添加进来 3.6 新建组将文件全部添加到工程中点击魔术棒旁边的三个格子的图标选择新建组我们分别新建FreeRTOS_src、FreeRTOS_inc、FreeRTOS_port三个组将工程文件夹src中的所有.c文件添加到FreeRTOS_src中将工程文件夹inc中的所有.h文件添加到FreeRTOS_inc中不包括.readme将工程文件夹port中的文件heap_4.c、port.c添加到FreeRTOS_port中,还有配置文件FreeRTOSConfig.h添加到FreeRTOS_inc组中 3.7 完成中断函数的宏定义在FreeRTOSConfig.h中在条件编译中加入
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler3.8 注释掉STM库函数中的三个中断空函数
分别为
void SVC_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);至此系统移植已经全部完成 4. 系统代码验证
4.1 首先在main文件中添加头文件FreeRTOS.h和task.h
#include stm32f10x.h // Device header
#include Delay.h
#include FreeRTOS.H
#include task.h4.2 我们直接使用LED灯闪烁的代码进行验证先创建一个任务函数
static void task1(void *arg)
{while(1){GPIO_ResetBits(GPIOC, GPIO_Pin_13);vTaskDelay(500);GPIO_SetBits(GPIOC, GPIO_Pin_13);vTaskDelay(500);}
}4.3 在主函数中创建一个任务并开启任务调度器 xTaskCreate(task1,task1,512,NULL,2,task1Handler);vTaskStartScheduler();4.4 当然要使用LED肯定要初始化串口我们以GPIOC中的GPIO_Pin_13为例
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOC, GPIO_InitStructure);4.5 main文件中的全部代码为
#include stm32f10x.h // Device header
#include Delay.h
#include FreeRTOS.H
#include task.hTaskHandle_t task1Handler;static void task1(void *arg)
{while(1){GPIO_ResetBits(GPIOC, GPIO_Pin_13);vTaskDelay(500);GPIO_SetBits(GPIOC, GPIO_Pin_13);vTaskDelay(500);}
}
int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_13;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOC, GPIO_InitStructure);xTaskCreate(task1,task1,512,NULL,2,task1Handler);vTaskStartScheduler();}FreeRTOS常用函数传送口【FreeRTOS】常用函数总结 4.6 完成编译后可以烧录到开发板上进行验证 4.7 或者使用keil自带的调试器进行调试 4.7.1 首先在魔术棒中找到debug选项选择use simulate下面也要配置成相应的单片机型号 4.7.2 点击调试按钮在上方添加逻辑分析仪 4.7.3 点击逻辑分析仪的setup添加信号我们使用的是stm32f103c8t6所以信号为PORTC.13不同的开发板可以查看配置的串口和单片机对应的寄存器注意需要将信号类型选择为bit 4.7.4 全速运行可以得到串口准确的波形 你也可以创建多个任务查看波形分析任务的执行情况 项目工程完整代码传送口 链接FreeRTOS示例工程 提取码k8uk