STM32F103移植FreeRTOS完整过程

前言

演示STM32F103移植FreeRTOS完整过程,文末提供移植好的完整工程,

1.下载源码

下载FreeRTOSv9.0.0.zip解压如下图
在这里插入图片描述
只用关注第一个文件夹FreeRTOS中的内容
在这里插入图片描述
Demo是官方提供的常见芯片的移植示例,包括STM32F103,我们需要用到其中的FreeRTOSConfig.h配置文件。
Source是源文件。

2.拷贝源码

在工程目录下创建FreeRTOS文件夹并创建子文件夹src和port
在这里插入图片描述
将Source/include文件夹拷贝到FreeRTOS下

将Source中的C文件拷贝到FreeRTOS/src下
在这里插入图片描述

将Source/portable下的MemMang和RVDS文件夹拷贝到FreeRTOS/port下,

其中MemMang下的源文件是用于堆栈管理的,RVDS下的源文件是不同内核相关的接口文件。
在这里插入图片描述

3.添加到工程

在这里插入图片描述
新建FreeRTOS/src和FreeRTOS/port组

FreeRTOS/src组中把FreeRTOS/src文件夹中的源文件全部添加

FreeRTOS/port组添加FreeRTOS\port\MemMang中的heap4.c和

FreeRTOS\port\RVDS\ARM_CM3中的port.c

添加头文件路径
在这里插入图片描述
拷贝FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_STM32F103_Keil下的FreeRTOSConfig.h文件到工程

4.修改配置

在FreeRTOSConfig.h中添加

#define xPortPendSVHandler 	PendSV_Handler
#define vPortSVCHandler 	SVC_Handler

在stm32f10x_it.c中屏蔽PendSV_Handler和SVC_Handler中断

最关键的一部,修改stm32f10x_it.c中的systick中断服务函数。

/**
  * @brief  This function handles SysTick Handler.
  * @param  None
  * @retval None
*/
extern void xPortSysTickHandler(void);
void SysTick_Handler(void)
{
    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
      if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
      {
    #endif  /* INCLUDE_xTaskGetSchedulerState */  
        xPortSysTickHandler();
    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
      }
    #endif  /* INCLUDE_xTaskGetSchedulerState */
}

5.验证demo

#include "stm32f10x.h"
#include "FreeRTOS.h"
#include "task.h"
#include "portmacro.h"
#include "bsp_led.h"  
#include "log.h"

static TaskHandle_t led_task_handle = NULL;

void led_task(void *arg)
{
	while(1)                            
	{
		led_status_set(LED_STATUS_ON);
		LOG_DEBUG("LED_STATUS_ON\r\n");
		vTaskDelay(500/portTICK_PERIOD_MS);
		led_status_set(LED_STATUS_OFF);
		LOG_DEBUG("LED_STATUS_OFF\r\n");
		vTaskDelay(500/portTICK_PERIOD_MS);
	}
}

int main(void)
{
	led_init();

	xTaskCreate(led_task, "led_task", 1024, NULL, 20, led_task_handle);

	// 开启调度
	vTaskStartScheduler();
	while(1);
}

6.完整工程

亲测可用,完整工程地址。
在这里插入图片描述

版权声明:本文为CSDN博主「无聊到发博客的菜鸟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36973838/article/details/121754908

生成海报
点赞 0

无聊到发博客的菜鸟

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

STM32CubeMx hal 驱动sg90舵机

一、舵机的控制原理 舵机通过接收PWM信号,使其进入内部电路产生一个偏置电压,触发电机通过减速齿轮带动电位器移动,使电压差为零时,电机停转,从而达到伺服的效果。即给舵机一个

X-bot

X-bot 前言 这个项目是我在稚辉君的视频里面看见的,是一个完全开源的项目,而且对他来说是一个比较简单的项目,但对于我这种没有什么DIY经验的同学来说,还是有点难的,不过