FreeRTOS移植到STM32F103
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相关推荐
- 【STM32】FreeRTOS 移植到 STM32F103
文章目录 main.c 移植后的程序结构如下图: 本节的任务设计为: start_task():用来创建其他三个任务. led0_task ():控制 LED0 的闪烁,提示系统正在运行. led1_ ...
- stm32的FreeRTOS移植
目录 FreeRTOS移植到STM32F103步骤与注意事项 前言: 一.从官网下载最新版的FreeRTOS源码 二.IAR下移植FreeRTOS 三.MDK下移植FreeRTOS 总结: STM32 ...
- 基于keil5自动配置stm32f103标准库的官网freertos移植
基于keil5自动配置stm32f103标准库的官网freertos移植 前言 序言:利用keil5自动配置stm32f103标准库工程 闲话 正式篇 移植官网FreeRTOS 前言 当笔者学习s ...
- FreeRTOS学习笔记【二】——FreeRTOS 移植
上一章中我们初步的了解了一下 FreeRTOS,本章就正式踏上 FreeRTOS 的学习之路, 首先 肯定是把 FreeRTOS 移植到我们所使用的平台上, 这里以 ALIENTEK 的 STM32F ...
- FreeRTOS移植
目录 FreeRTOS移植流程 1 在基础工程 中 新建 FreeRTOS 文件夹 并且把源码添加到这文件夹 编辑 2 在 portable 文件中保留keil MemMang 和 RVDS 其他删 ...
- 【STM32】FreeRTOS移植
00. 目录 文章目录 00. 目录 01. 简介 02. 预备工作 03. FreeRTOS移植 04. SYSTEM文件修改 05. 测试程序设计 06. 附录 07. 参考 01. 简介 我们已 ...
- STM32C8T6的FreeRTOS移植
直接开撸 直接看着正点原子的FreeRTOS移植,就是我用的是C8T6 O(∩_∩)O哈哈~ 穷孩子,先用C8T6凑合着.不过C8T6的flash比较小,不知道什么时候就爆了哈哈. ①首先改完所有报错 ...
- LiteOS移植到STM32F103系列单片机,非常简单
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 LiteOS移植到STM32F103系列单片机 前言 一.下载老版本liteos 二.参考官方的推荐移植步骤 1.新建项目 1.1打开 ...
- 将uc/OS移植到stm32F103上
将uc/OS移植到stm32F103上 一.嵌入式实时操作系统(RTOS) 1.定义 2.实时任务 3.特征 二.使用CubeMX建立STM32F103C8T6HAL库 三.移植uC/OS-III 四 ...
最新文章
- 女朋友存好多网上男明星的照片,我准备用python全部换成我的脸
- C# 全选中数字文本框内容
- 【Android 事件分发】事件分发源码分析 ( ViewGroup 事件传递机制 四 | View 事件传递机制 )
- Android中访问通讯录,数据的增删改查
- mac 安装jdk_Mac安装rJava天坑
- Exception 'ReflectionException' with message 'Class require does not exist'
- 2018 开源分布式中间件 DBLE 年报
- mysql join 实践
- Win10PE纯净版制作过程
- SELECT command denied to user ''@'%' for column 'xxx_id' in table 'users_xxx' 权限问题
- JAVA8安装与配置
- Pandas 实用技能,数据筛选 query 函数详细介绍
- 电子学会青少年软件编程Python编程等级考试一级真题解析(选择题+判断题)2022年6月
- linux内核ppt刘小明,【陈老师华为北研所讲座PPT】从机制与策略探究Linux内核设计之道(4)...
- java输入值按回车下一个_java 如何 按回车 光标换到下个输入框
- 通过实验对比十大排序算法
- 安卓一键清理内存_米财清理星手机版下载-米财清理星安卓版 v1.5.0免费版
- 怎么用服务器网络中转,怎么假设中转服务器
- 一图看懂centos和ubuntu命令区别
- 毕业5年,年薪60万,我总结了职场最值钱的6句话!
热门文章
- Qt文档阅读笔记-QThreadPool的解释及使用
- Qt工作笔记-自定义菜单(右键菜单)
- C++ opengl 绘制三角形扇
- 马踏棋盘算法(骑士周游问题)
- ERRORS:*: (auth.E003) ‘User.username‘ must be unique because it is named as the ‘USERNAME_FIELD
- 计算机科技专业前景,美国伊利诺伊理工大学
- vue弹出层滑动禁止背景跟着滑动_vue移动端弹起蒙层滑动禁止底部滑动操作
- mysql 的节点组是什么_什么是MySQL集群
- 只开窗不镀锡_推拉窗和平开窗哪个好?
- 【C语言重点难点精讲】C语言文件