【STM32】HAL库 移植FreeRTOS并使用

一、移植FRreeRTOS到STM32

1、这个我用的是STM32CudeMX的FRreeRTOS组件,通过配置Config Paramaters和Include Paramaters裁剪FreeRTOS内核,选择我们需要的API,当然也可以去官网下载源码添加到工程中完成移植
在这里插入图片描述2、生成Keil项目后,编译一下,在工程中找到FreeRTOSConfig.h文件,仍可以通过这两类宏来裁剪内核
在这里插入图片描述
移植好了,可以开始学习FreeRTOS了

二、认识程序框架

1、通过Cude生成的Keil工程,一眼就能看出架构,从底往上依次是内核、驱动层、硬件抽象层、应用层,瞬间有操作系统的味道了
在这里插入图片描述
2、上三层跟裸机程序是一样的,我们来看看内核层,源代码就是一切
在这里插入图片描述

  • croutine.c : 协程相关
  • event_groups.c : 事件标志组相关
  • tasks.c 任务控制块:描述任务属性的结构体,用于任务创建、挂起、恢复、调度
  • list.c 列表和列表项,FreeRTOS的一种基础数据结构
  • queue.c : 队列相关
  • timers.c : 软件定时器相关
  • heap_4.c : 内存管理相关
  • port.c : 针对不同硬件平台的接口

三、调用API编程

1、利用STM32CudeMX配置后,任务会自动创建,任务定义在freertos.c中,可直接在任务体中编写任务(这连API都不用调,让我情何以堪),简单测试一下,之前配置了两个任务,我们让两个任务向同一个串口发送消息,频率分别为1s每次和5s每次。

void Task1(void const * argument)
{
  /* USER CODE BEGIN Task1 */
  /* Infinite loop */
  for(;;)
  {
	uint8_t TxData[10]= "1111111111";
    HAL_UART_Transmit(&huart4,TxData,10,0xffff);
    osDelay(1000);
  }
void Task2(void const * argument)
{
  /* USER CODE BEGIN Task2 */
  /* Infinite loop */
  for(;;)
  {
	uint8_t TxData[10]= "2222222222";
    HAL_UART_Transmit(&huart4,TxData,10,0xffff);
    osDelay(5000);
  }
}

2、STM32通过ttl串口连接电脑
在这里插入图片描述
3、在电脑上打开串口助手,发现两个任务都在执行,且任务1每发送5次,任务2发送一次,OK啦!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33033059/article/details/106677140