FreeRTOS_Stm32F103系列单片机标准库移植

这篇具有很好参考价值的文章主要介绍了FreeRTOS_Stm32F103系列单片机标准库移植。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、下载FreeRTOS源码

1.1github仓库下载

链接:FreeRTOS

下面的教程是基于从github下载压缩包进行的,最好下载这个或者直接看3.1,从我百度网盘下载。如果是别的下载源也问题不大,大同小异。

此时我们需要下载以下两个仓库,
stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件
点进去按下面的步骤下载就行了,另一个也是这样下。
stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

1.2官网下载

链接: FreeRTOS官网

打开链接我们可以看到有两个下载选项,我们下载第一个就行。
下载速度较慢。
stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

1.3百度网盘下载

链接:https://pan.baidu.com/s/1x00zgnJfCae75DpJ1W4RIg?pwd=1233
提取码:1233

若上述都不行可以直接私信。

2、FreeRTOS移植

2.1首先需要有一个可运行的标准库工程

我这里拿一个跟江科大创建的标准库工程为例:
stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.2在工程内创建一个FreeRTOS文件夹,然后在FreeRTOS文件夹中再新建port、include、src三个文件夹。

  • port文件夹存放移植平台的相关文件
  • include文件夹存放FreeRTOS相关的头文件
  • src文件夹用来存放FreeRTOS相关的源码

stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.3 port文件夹移植

  • 将下载的源码:FreeRTOS源码\FreeRTOS-Kernel-dc09a3dd5144c4033607565c71b9919900f95cff\portable\MemMang路径下的heap_4.c文件复制到自己创建的port文件夹中
  • 将FreeRTOS源码\FreeRTOS-Kernel-dc09a3dd5144c4033607565c71b9919900f95cff\portable\RVDS\ARM_CM3路径下的port.cportmacro.h文件复制到自己创建的port文件夹中
    stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.4 include文件夹移植

  • 将下载源码:FreeRTOS源码\FreeRTOS-Kernel-dc09a3dd5144c4033607565c71b9919900f95cff\include路径下的所有头文件复制到自己创建的include文件夹中。
    stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.5 src文件夹移植

  • 将FreeRTOS源码\FreeRTOS-Kernel-dc09a3dd5144c4033607565c71b9919900f95cff文件夹中的所有FreeRTOS相关.c文件复制到自己创建的src文件夹中
    stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件
    stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.6 移植FreeRTOSConfig.h配置文件

  • 在下载源码:FreeRTOS源码\FreeRTOS-main\FreeRTOS\Demo\CORTEX_STM32F103_Keil路径下将FreeRTOSConfig.h文件复制到自己创建的FreeRTOS文件夹中
    stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.7 在keil中添加文件路径

在keil中点击魔术棒,进入“C/C++”,在Include Paths中添加FreeRTO、src、inc、port路径。
stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件
stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.8 打开组文件夹管理,新建FreeRTOS组

stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.9 添加freeRTOS源文件

按下面的操作分别添加src文件夹和port文件夹下的所有.c文件
stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.10 修改FreeRTOSConfig.h配置文件

  • 1.先编译链接下工程
  • 2.根据下面图操作打开FreeRTOSConfig.h文件
    stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件
  • 3.添加以下几条宏定义
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler

stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.10注释掉stm32f10x_it.c中的三个中断处理空函数

注释掉以下几个函数

void SVC_Handler(void);
void PendSV_Handler(void);
void SysTick_Handler(void);

stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件

2.11此时编译链接无报错

3、调试测试

我们简单写一个让STM32F103C8T6最小系统板上led灯闪烁的程序测试下。

  • 1.首先添加几个有关FreeRTOS基本操作的头文件
#include "freertos.h"
#include "task.h"
#include "timers.h"
  • 2.简单写一个led灯对应GPIO初始化的函数
void Led_Init(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);
}
  • 3.简单写一个led闪烁的任务
void Led_Task(void *pvParams)
{
	Led_Init();
	while(1)
	{
		GPIO_ResetBits(GPIOC,GPIO_Pin_13);
		vTaskDelay(500);
		GPIO_SetBits(GPIOC,GPIO_Pin_13);
		vTaskDelay(500);
	}
}
  • 4.创建任务并启动调度
int main(void)
{
	xTaskCreate(Led_Task,"ledtask",128,NULL,12,NULL);
	vTaskStartScheduler();
}
  • 5.下载到开发板上进行测试,效果很好。

main文件中的全部代码为

#include "stm32f10x.h"                  // Device header

#include "freertos.h"
#include "task.h"
#include "timers.h"

void Led_Init(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);
}

void Led_Task(void *pvParams)
{
	Led_Init();
	while(1)
	{
		GPIO_ResetBits(GPIOC,GPIO_Pin_13);
		vTaskDelay(500);
		GPIO_SetBits(GPIOC,GPIO_Pin_13);
		vTaskDelay(500);
	}
}

int main(void)
{
	xTaskCreate(Led_Task,"ledtask",128,NULL,12,NULL);
	vTaskStartScheduler();
}

4.移植完成的工程

链接:https://pan.baidu.com/s/1E_bi4nIzayskaVl3YrLBGA?pwd=1233
提取码:1233

5、注意

需要注意的是Stm32F103C8T6的SRAM仅有20KB,而我们移植的FreeRTOS默认占用了17KB来作为自己的堆,所以我们写不了多少程序就会出现内存超出无法编译的情况。
stm32f103it.h,FreeRTOS,STM32,单片机,stm32,嵌入式硬件
故我们需要手动将configTOTAL_HEAP_SIZE调小些。如:
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 8 * 1024 ) )文章来源地址https://www.toymoban.com/news/detail-816177.html

到了这里,关于FreeRTOS_Stm32F103系列单片机标准库移植的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32f103单片机—编码器测速

    stm32f103ZET6开发板(非指定) MG513P3012V型号电机(带霍尔编码器)(非指定) 此种测速方法要求单片机的定时器具有编码器模式,对于stm32f1系列,具备编码器模式的定时器有TIM1/2/3/4/5/8, 定时器使用通道1、2来实现编码器功能 ,接线时注意把A/B相接到定时器通道1/2的引脚。 电

    2024年02月06日
    浏览(66)
  • 【单片机】STM32单片机频率计程序,外部脉冲计数程序,基于脉冲计数的频率计程序,STM32F103

    两种方法用于在单片机中实现频率计的功能。 第一种方法是通过定时器来衡量信号的周期,然后将周期转换为频率。在这种方法中,你可以使用单片机的定时器模块来测量输入信号的周期,定时器会产生一个计数值,你可以根据这个计数值来推算出输入信号的周期,并通过简

    2024年02月11日
    浏览(41)
  • 【单片机】STM32单片机,RTC实时时钟,STM32F103C8T6,程序,万年历,数字时钟

    我以STM32F103C8T6为例,但STM32F103的RTC是通用的,STM32F103C8T6有一个原理图: https://qq742971636.blog.csdn.net/article/details/131288390 用纽扣电池给VBAT供电(要共地),即可实现掉电后依旧走时的能力。 主要特性(来源于STM32中文参考手册V10.pdf): 记得加标准库文件: 串口接收:

    2024年02月11日
    浏览(47)
  • 关于单片机的时钟浅谈及STM32F103/F030单片机的内外时钟切换问题

    本文主要讲解单片机的时钟系统的相关知识,并进行超频测试,同时介绍如何在STM32F0单片机上进行内外时钟的切换,在不使用外部晶振或者外部晶振不启动时自动切换内部时钟的方法。 问题来源于群里的一次问答: 诚然,当使用固件库时,把外部晶振摘掉,系统确实会自动

    2024年02月15日
    浏览(35)
  • STM32F103ZE单片机呼吸灯源代码

    本实验采用的系统频率SYSTIM为8MHZ,如果频率改变需要修改一个数值

    2024年02月09日
    浏览(44)
  • JDY-31蓝牙模块远程控制STM32F103单片机

       手机app通过蓝牙模块发送指令实时控制单片机的外设功能,比如发送衣柜开关门指令(舵机旋转),衣架上升降落(步进电机正转反转),远程开启去污除湿功能(继电器控制打开关闭小风扇+加热片)。 本次例子:手机APP连接蓝牙模块远程控制SG90舵机正转(0-180°)和反

    2024年02月01日
    浏览(55)
  • 【单片机】STM32单片机,定时器,多路PWM,TIM1、TIM2、TIM3、TIM4,STM32F103

    下图是定时器相关引脚: 在《STM32中文参考手册V10.pdf》有写: TIM1 的PWM是带互补输出的,较为高级和复杂,有兴趣可以参考其他介绍文章,这里的代码让7个引脚输出PWM。 调用: 这里没有重映射,注意不能把PA9 PA10 初始化成串口去了。 timer.c timer.h 调用: 这里没有重映射。

    2024年02月11日
    浏览(57)
  • 【单片机学习笔记】Windows+Vscode+STM32F4+freeRTOS+FatFs gcc环境搭建

    为摒弃在接受keil邮件,研究了下gun编译,以STM32F407为例,简单记录 Git 选择对应版本直接安装即可https://git-scm.com/download/win make gcc ​ 1)将上述软件包放置于C盘根目录 2)添加环境变量 3)cmd命令行测试环境 分别输入 启动文件及LD文件 目录路径表示问题 字节对齐及指定位置存

    2024年02月07日
    浏览(48)
  • (STM32F103单片机)DHT11温湿度传感器

    目录   一,产品介绍 二,产品亮点 三,产品参数 四,引脚连接及通信说明  五,原理讲解 六,源码 1,DHR11.C 2.DHR11.H 3,main.c DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高

    2023年04月08日
    浏览(47)
  • STM32F103单片机控制继电器开关小风扇和加热片

       在智能衣柜中,使用异味传感器检测柜内异味值,当异味值大于设定值时会自动开启小风扇,小风扇起到一个排污去浊的功能,再加上温湿度传感器检测柜内的温度和湿度,当温湿度达到设定值时,加热片自动发热,起到一个降温除霉的作用。想要使小风扇和加热片自动

    2024年02月02日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包