stm32F103C8T6基于FreeRTOS操作系统的多任务(STM32CUBEMX)

一、简介

FreeRTOS,是指实时操作系统,是可以多任务进行的一个操作系统,相当于裸机开发而已,任务的实现相对方便很多。FreeRTOS(读作"free-arr-toss")是一个嵌入式系统使用的开源实时操作系统。FreeRTOS被设计为“小巧,简单,和易用”,能支持许多不同硬件架构以及交叉编译器。
FreeRTOS自2002年Richard Barry开始开发以来,一直都在积极开发中。就像所有操作系统一样,FreeRTOS的主要工作是执行任务。大部分FreeRTOS的代码都涉及优先权、调度以及执行用户自定义任务。但又与所有其他操作系统不同,FreeRTOS是一款运行在嵌入式系统上的实时操作系统。

二、任务要求

学习嵌入式实时操作系统(RTOS),将其移植到stm32F103上,构建至少3个任务(task):其中两个task分别以1s和3s周期对LED等进行点亮-熄灭的控制;另外一个task以2s周期通过串口发送“hello uc/OS! 欢迎来到RTOS多任务环境!”。记录详细的移植过程。

三、创建项目

  1. 打开cubeMx 创建项目,配置2个GPIO为output(PB0,PC13),在配置一个Usart1
    我的配置如下:
    在这里插入图片描述

  2. 配置SYS
    在这里插入图片描述

  3. 配置FREERTOS
    在这里插入图片描述

  4. 添加多任务,我添加了一个串口输出,两个LED闪烁的任务
    在这里插入图片描述

  5. 在完成之后选择Project Manager 里面的Project,根据对应的MDK选择的MDK-ARM V5

在这里插入图片描述

  1. 然后在Code Generator 里面勾选
    在这里插入图片描述

7.右上角点击GENERATE CODE 生成工程,打开工程之后,在freertos.c文件里面,就已经有生成的相应任务定义
在这里插入图片描述

三、编写任务代码

在ferrrtos.c中的任务函数里面写相应的程序

void StartUsartTask(void const * argument)
{
  /* USER CODE BEGIN StartUsartTask */
  /* Infinite loop */
  for(;;)
  {
    osDelay(2000);
	  printf("hello uc/OS! 欢迎来到RTOS多任务环境!");
  }
  /* USER CODE END StartUsartTask */
}

/* USER CODE BEGIN Header_StartTaskLed1 */
/**
* @brief Function implementing the TaskLed1 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTaskLed1 */
void StartTaskLed1(void const * argument)
{
  /* USER CODE BEGIN StartTaskLed1 */
  /* Infinite loop */
  for(;;)
  {
    osDelay(1000);
	  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
  }
  /* USER CODE END StartTaskLed1 */
}

/* USER CODE BEGIN Header_StartTaskLed2 */
/**
* @brief Function implementing the TaskLed2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTaskLed2 */
void StartTaskLed2(void const * argument)
{
  /* USER CODE BEGIN StartTaskLed2 */
  /* Infinite loop */
  for(;;)
  {
    osDelay(3000);
	  HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
  }
  /* USER CODE END StartTaskLed2 */
}

我这里重写了printf,添加以下代码在ferrrtos.c文件里面即可

/* USER CODE BEGIN Includes */
#include "usart.h"
#include "stdio.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
int fputc(int ch,FILE *f){
 uint8_t temp[1]={ch};
 HAL_UART_Transmit(&huart1,temp,1,2);
 return ch;
}

注意:重写printf后运行代码前一定要勾选Use MicroLiB,否则项目烧录后无法执行。
在这里插入图片描述

四、效果

在这里插入图片描述

请添加图片描述

五、参考

https://blog.csdn.net/build_oooxf/article/details/89321205

版权声明:本文为CSDN博主「伊木子曦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Mouer__/article/details/121616118

一、简介

FreeRTOS,是指实时操作系统,是可以多任务进行的一个操作系统,相当于裸机开发而已,任务的实现相对方便很多。FreeRTOS(读作"free-arr-toss")是一个嵌入式系统使用的开源实时操作系统。FreeRTOS被设计为“小巧,简单,和易用”,能支持许多不同硬件架构以及交叉编译器。
FreeRTOS自2002年Richard Barry开始开发以来,一直都在积极开发中。就像所有操作系统一样,FreeRTOS的主要工作是执行任务。大部分FreeRTOS的代码都涉及优先权、调度以及执行用户自定义任务。但又与所有其他操作系统不同,FreeRTOS是一款运行在嵌入式系统上的实时操作系统。

二、任务要求

学习嵌入式实时操作系统(RTOS),将其移植到stm32F103上,构建至少3个任务(task):其中两个task分别以1s和3s周期对LED等进行点亮-熄灭的控制;另外一个task以2s周期通过串口发送“hello uc/OS! 欢迎来到RTOS多任务环境!”。记录详细的移植过程。

三、创建项目

  1. 打开cubeMx 创建项目,配置2个GPIO为output(PB0,PC13),在配置一个Usart1
    我的配置如下:
    在这里插入图片描述

  2. 配置SYS
    在这里插入图片描述

  3. 配置FREERTOS
    在这里插入图片描述

  4. 添加多任务,我添加了一个串口输出,两个LED闪烁的任务
    在这里插入图片描述

  5. 在完成之后选择Project Manager 里面的Project,根据对应的MDK选择的MDK-ARM V5

在这里插入图片描述

  1. 然后在Code Generator 里面勾选
    在这里插入图片描述

7.右上角点击GENERATE CODE 生成工程,打开工程之后,在freertos.c文件里面,就已经有生成的相应任务定义
在这里插入图片描述

三、编写任务代码

在ferrrtos.c中的任务函数里面写相应的程序

void StartUsartTask(void const * argument)
{
  /* USER CODE BEGIN StartUsartTask */
  /* Infinite loop */
  for(;;)
  {
    osDelay(2000);
	  printf("hello uc/OS! 欢迎来到RTOS多任务环境!");
  }
  /* USER CODE END StartUsartTask */
}

/* USER CODE BEGIN Header_StartTaskLed1 */
/**
* @brief Function implementing the TaskLed1 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTaskLed1 */
void StartTaskLed1(void const * argument)
{
  /* USER CODE BEGIN StartTaskLed1 */
  /* Infinite loop */
  for(;;)
  {
    osDelay(1000);
	  HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
  }
  /* USER CODE END StartTaskLed1 */
}

/* USER CODE BEGIN Header_StartTaskLed2 */
/**
* @brief Function implementing the TaskLed2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTaskLed2 */
void StartTaskLed2(void const * argument)
{
  /* USER CODE BEGIN StartTaskLed2 */
  /* Infinite loop */
  for(;;)
  {
    osDelay(3000);
	  HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
  }
  /* USER CODE END StartTaskLed2 */
}

我这里重写了printf,添加以下代码在ferrrtos.c文件里面即可

/* USER CODE BEGIN Includes */
#include "usart.h"
#include "stdio.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
int fputc(int ch,FILE *f){
 uint8_t temp[1]={ch};
 HAL_UART_Transmit(&huart1,temp,1,2);
 return ch;
}

注意:重写printf后运行代码前一定要勾选Use MicroLiB,否则项目烧录后无法执行。
在这里插入图片描述

四、效果

在这里插入图片描述

请添加图片描述

五、参考

https://blog.csdn.net/build_oooxf/article/details/89321205

版权声明:本文为CSDN博主「伊木子曦」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Mouer__/article/details/121616118

生成海报
点赞 0

伊木子曦

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

暂无评论

相关推荐

在Stm32CubeIDE环境下使用DAP-Link仿真

目录 一、文章背景 二、准备工作 三、调试过程 四、编写脚本自动执行OpenOCD服务 一、文章背景 最近师弟需要调STM32,由于他已经习惯了Eclipse的开发环境,所以给他推荐了Stm32CubeIDE

STM32的12位ADC过采样实现16位分辨率

1.什么是过采样过采样技术是一种以牺牲采样速度来提高ADC分辨率的技术。部分STM32单片机是支持硬件过采样的,如STM32G0系列。通过过采样,可以将12位的ADC提升到16位,非常实用。根据过采样技