1.创建工程

2.将FreeRTOS源码,拷贝到工程目录

3.删除其它架构和编译器的代码

查看portable文件夹发现

MemMang为内存管理相关文件需要保留

Commom里面有个mpu相关代码,我们不使用mpu,可以删除

我们的开发环境是keil,打开keil文件夹,提示我们参照RVDS,因此保留RVDS,其它删除

打开RVDS文件夹

STM32F103的内核为CORTEX-M3,删除其它架构相关文件

4.将FreeRTOS文件添加进工程

添加好之后,编译出现错误,缺少FreeRTOSConfig.h文件

5.添加配置文件

从FreeRTOS的demo程序中,将FreeRTOSConfig.h文件拷贝过来

重新编译,无错误无警告

6.修改异常向量入口

我们知道SVC用于产生系统函数的调用请求,需要立即得到响应。SysTick用于产生系统节拍。PendSV用于悬起延迟处理。

在FreeRTOS的port.c中定义了这个三个异常的处理入口,分别为vPortSVCHandler、xPortSysTickHandler、xPortPendSVHandler。

在stm32f10x_it.c中也定义了这个三个异常的处理入口,分别为SVC_Handler、PendSV_Handler、SysTick_Handler。

因此,我们需要将异常处理入口指向由原来的SVC_Handler、PendSV_Handler、SysTick_Handler改变为vPortSVCHandler、xPortSysTickHandler、xPortPendSVHandler。

注释掉原来的异常处理入口函数

在FreeRTOSConfig.h中重新定义异常处理入口函数

7.测试移植是否成功,创建rcc.h、rcc.c、nvic.h、nvic.c、freertos.c五个文件。

/************************************** 文件名:rcc.h* 作者:   stone* 版本:  V0.1* 日期:   2018-3-29* 描述:  配置时钟源************************************/
#ifndef __RCC_H_
#define __RCC_H_/* 功能:  RCC时钟配置参数:  无返回值:无*/
void rcc_config(void);#endif
/************************************** 文件名: rcc.c* 作者:      stone* 版本:      V0.1* 日期:       2018-3-29* 描述:      配置时钟源************************************/
#include "stm32f10x.h"
#include "stm32f10x_flash.h"
#include "rcc.h"/* 功能:    RCC时钟配置参数:  无返回值:无*/
void rcc_config(void)
{ ErrorStatus HSEStartUpStatus;/* RCC寄存器设置为默认配置 */RCC_DeInit();/* 打开外部高速时钟 */RCC_HSEConfig(RCC_HSE_ON);/* 等待外部高速时钟稳定 */HSEStartUpStatus = RCC_WaitForHSEStartUp();if(HSEStartUpStatus == SUCCESS) { /* 设置HCLK = SYSCLK */RCC_HCLKConfig(RCC_SYSCLK_Div1);/* 设置PCLK2 = HCLK */RCC_PCLK2Config(RCC_HCLK_Div1);/* 设置PCLK1 = HCLK / 2 */RCC_PCLK1Config(RCC_HCLK_Div2);/* 设置FLASH代码延时 */FLASH_SetLatency(FLASH_Latency_2);/* 使能预取址缓存 */FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);/* 设置PLL时钟源为HSE倍频9 72MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/* 使能PLL */RCC_PLLCmd(ENABLE);/* 等待PLL稳定 */while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);/* 设置PLL为系统时钟源 */RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/* 等待系统时钟源切换到PLL */while(RCC_GetSYSCLKSource() != 0x08);/* 设置系统节拍器时钟源为FCLK */SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);}
}
/************************************** 文件名: nvic.h* 作者:     stone* 版本:      V0.1* 日期:       2018-3-29* 描述:      设置中断控制器************************************/
#ifndef __NVIC_H_
#define __NVIC_H_/* 功能: 中断嵌套控制器配置参数:    无返回值:无*/
void nvic_config(void);#endif
/************************************** 文件名: nvic.c* 作者:     stone* 版本:      V0.1* 日期:       2018-3-29* 描述:      设置中断控制器************************************/
#include "stm32f10x.h"
#include "nvic.h"/* 功能:   中断嵌套控制器配置参数:    无返回值:无*/
void nvic_config(void)
{/* 选择中断分组4 */NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
}
/************************************** 文件名: main.c* 作者:     stone* 版本:      V0.1* 日期:       2018-3-29* 描述:      主文件************************************/
#include "stm32f10x.h"
#include "rcc.h"
#include "nvic.h"
#include "FreeRTOS.h"
#include "task.h"/* 硬件初始化 */
static void prvSetupHardware(void);
/* freertos初始化 */
void freertos_init(void);/* 主函数 */
int main(void)
{/* 硬件初始化 */prvSetupHardware();/* freertos初始化 */freertos_init();/* 启动调度器 */vTaskStartScheduler();
}/* 硬件初始化 */
static void prvSetupHardware(void)
{/* 时钟配置 */rcc_config();/* 中断嵌套控制器配置 */nvic_config();
}
/************************************** 文件名: freertos.c* 作者:     stone* 版本:      V0.1* 日期:       2019-2-25* 描述:      系统对象创建************************************/
#include "FreeRTOS.h"
#include "task.h"/* 测试任务1 */
void test1Task(void *argument);
/* 测试任务2 */
void test2Task(void *argument);/* 功能:   freertos初始化参数:  无返回值:无*/
void freertos_init(void)
{/* 创建测试任务1 */xTaskCreate(test1Task, "test1", 128, NULL, 3, NULL );/* 创建测试任务2 */xTaskCreate(test2Task, "test2", 128, NULL, 3, NULL );
}/* 功能: 测试任务1参数:    创建时传入返回值:无*/
void test1Task(void *argument)
{/* 主循环 */for(;;){/* 延时1秒 */vTaskDelay(1000);}
}/* 功能: 测试任务2参数:    创建时传入返回值:无*/
void test2Task(void *argument)
{/* 主循环 */for(;;){/* 延时1秒 */vTaskDelay(1000);}
}

使用j-link调试,在任务1和任务2中分别打上断点,系统调度正常

移植成功。

FreeRTOS移植到STM32F103相关推荐

  1. 【STM32】FreeRTOS 移植到 STM32F103

    文章目录 main.c 移植后的程序结构如下图: 本节的任务设计为: start_task():用来创建其他三个任务. led0_task ():控制 LED0 的闪烁,提示系统正在运行. led1_ ...

  2. stm32的FreeRTOS移植

    目录 FreeRTOS移植到STM32F103步骤与注意事项 前言: 一.从官网下载最新版的FreeRTOS源码 二.IAR下移植FreeRTOS 三.MDK下移植FreeRTOS 总结: STM32 ...

  3. 基于keil5自动配置stm32f103标准库的官网freertos移植

    基于keil5自动配置stm32f103标准库的官网freertos移植 前言 序言:利用keil5自动配置stm32f103标准库工程 闲话 正式篇 移植官网FreeRTOS 前言   当笔者学习s ...

  4. FreeRTOS学习笔记【二】——FreeRTOS 移植

    上一章中我们初步的了解了一下 FreeRTOS,本章就正式踏上 FreeRTOS 的学习之路, 首先 肯定是把 FreeRTOS 移植到我们所使用的平台上, 这里以 ALIENTEK 的 STM32F ...

  5. FreeRTOS移植

    目录 FreeRTOS移植流程 1 在基础工程 中 新建 FreeRTOS 文件夹 并且把源码添加到这文件夹 ​编辑 2 在 portable 文件中保留keil MemMang 和 RVDS 其他删 ...

  6. 【STM32】FreeRTOS移植

    00. 目录 文章目录 00. 目录 01. 简介 02. 预备工作 03. FreeRTOS移植 04. SYSTEM文件修改 05. 测试程序设计 06. 附录 07. 参考 01. 简介 我们已 ...

  7. STM32C8T6的FreeRTOS移植

    直接开撸 直接看着正点原子的FreeRTOS移植,就是我用的是C8T6 O(∩_∩)O哈哈~ 穷孩子,先用C8T6凑合着.不过C8T6的flash比较小,不知道什么时候就爆了哈哈. ①首先改完所有报错 ...

  8. LiteOS移植到STM32F103系列单片机,非常简单

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 LiteOS移植到STM32F103系列单片机 前言 一.下载老版本liteos 二.参考官方的推荐移植步骤 1.新建项目 1.1打开 ...

  9. 将uc/OS移植到stm32F103上

    将uc/OS移植到stm32F103上 一.嵌入式实时操作系统(RTOS) 1.定义 2.实时任务 3.特征 二.使用CubeMX建立STM32F103C8T6HAL库 三.移植uC/OS-III 四 ...

最新文章

  1. 女朋友存好多网上男明星的照片,我准备用python全部换成我的脸
  2. C# 全选中数字文本框内容
  3. 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 )
  4. Android中访问通讯录,数据的增删改查
  5. mac 安装jdk_Mac安装rJava天坑
  6. Exception 'ReflectionException' with message 'Class require does not exist'
  7. 2018 开源分布式中间件 DBLE 年报
  8. mysql join 实践
  9. Win10PE纯净版制作过程
  10. SELECT command denied to user ''@'%' for column 'xxx_id' in table 'users_xxx' 权限问题
  11. JAVA8安装与配置
  12. Pandas 实用技能,数据筛选 query 函数详细介绍
  13. 电子学会青少年软件编程Python编程等级考试一级真题解析(选择题+判断题)2022年6月
  14. linux内核ppt刘小明,【陈老师华为北研所讲座PPT】从机制与策略探究Linux内核设计之道(4)...
  15. java输入值按回车下一个_java 如何 按回车 光标换到下个输入框
  16. 通过实验对比十大排序算法
  17. 安卓一键清理内存_米财清理星手机版下载-米财清理星安卓版 v1.5.0免费版
  18. 怎么用服务器网络中转,怎么假设中转服务器
  19. 一图看懂centos和ubuntu命令区别
  20. 毕业5年,年薪60万,我总结了职场最值钱的6句话!

热门文章

  1. Qt文档阅读笔记-QThreadPool的解释及使用
  2. Qt工作笔记-自定义菜单(右键菜单)
  3. C++ opengl 绘制三角形扇
  4. 马踏棋盘算法(骑士周游问题)
  5. ERRORS:*: (auth.E003) ‘User.username‘ must be unique because it is named as the ‘USERNAME_FIELD
  6. 计算机科技专业前景,美国伊利诺伊理工大学
  7. vue弹出层滑动禁止背景跟着滑动_vue移动端弹起蒙层滑动禁止底部滑动操作
  8. mysql 的节点组是什么_什么是MySQL集群
  9. 只开窗不镀锡_推拉窗和平开窗哪个好?
  10. 【C语言重点难点精讲】C语言文件