基于STM32F103的HAL库手动配置FreeRTOS

基于STM32F103的HAL库手动配置FreeRTOS

源码下载

FreeRTOS源码下载包括示例工程与内核工程。
示例工程:获取与开发环境相关的架构文件
内核工程:移植FreeRTOS的内核文件
示例工程Gitee地址
内核工程GirHub地址

STM32工程创建

使用STM32CubeMX创建新工程,注意基准时钟源使用除滴答时钟(SysTick)外的定时器担当。
原因:在FreeRTOS中滴答定时器被作为任务调度定时器。
在这里插入图片描述

FreeRTOS移植

1、源文件移植
将下载的内核工程目录下的所有C文件添加到工程中
2、头文件移植
将下载的内核工程目录中的include文件夹添加到工程中
3、环境文件移植
将下载的内核工程目录中的portable文件夹添加到工程中,其中保留Keil、MenMang、RVDS三个文件夹即可,Keil为使用的环境,MenMang为内存管理文件,RVDS为所使用的芯片架构
4、添加配置文件
在下载的示例工程中选择对应的芯片Demo,复制FreeRTOSConfig.h(配置头文件)到工程下
在这里插入图片描述
在这里插入图片描述

Keil工程配置

创建Groups并添加相应的资源文件
在这里插入图片描述
在这里插入图片描述
在FreeRTOSConfig.h文件中添加宏定义(用于顶替默认工程的相关中断),同时删除默认工程下的对应定义(stm32f1xx_it.c文件夹中)
在这里插入图片描述
编译后无报错无警告即可。

测试

测试示例:一个LED1S闪烁,另外一个0.5S闪烁
添加头文件:

#include "FreeRTOS.h"
#include "task.h"

任务函数:

void VTask1(void *pvParameters)
{
	while(1)
	{
		HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
		HAL_Delay(1000);
	}
}

void VTask2(void *pvParameters)
{
	while(1)
	{
		HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
		HAL_Delay(500);
	}
}

创建任务并执行:

  xTaskCreate(VTask1,"LED1",128,NULL,1,NULL);
  xTaskCreate(VTask2,"LED2",128,NULL,1,NULL);

  vTaskStartScheduler();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值