目录
CubeMX 创建FreeRTOS 入门实例
- 该笔记记录使用CubeMX创建FreeRTOS工程的粗略讲解,快速构建一个工程,对FreeRTOS有一个初步认识
- 选择CubeIDE或CubeMX 创建项目,在这期间会出现一些警告,可去FreeRTOS+CubeMX入门–warning and error中查看
基础配置
选择 TIM6 代替 Systick 是因为 FreeRTOS 会占用 Systick,使用其他定时器代替Systick避免不必要的错误
时钟选择外部高速时钟
选择最新的CMSIS_V2接口,该接口作用是链接STM32与FreeRTOS
FreeRTOS的各个参数简单先了解一下,后面的笔记会详细记录
FreeRTOS会生成一个默认任务用于执行
第一个项目-驱动OLED
中断配置
文件 的简单认识
oled驱动改编自江协科技的标准库版本
主函数代码简单分析
#include "FreeRTOS.h"
#include "task.h"
#include "main.h"
#include "cmsis_os.h"
#include "OLED.h"
// 创建任务句柄
osThreadId_t defaultTaskHandle;
// 设置任务参数
const osThreadAttr_t defaultTask_attributes = {
.name = "defaultTask",
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
void StartDefaultTask(void *argument);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) one
void MX_FREERTOS_Init(void) {
// 创建任务
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);
}
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN StartDefaultTask */
OLED_Init();
uint64_t i = 0;
/* Infinite loop */
for(;;)
{
i+=1;
OLED_ShowNum(0,0,i,10,6);
OLED_Update();
osDelay(1000);
}
}
编写业务函数
在默认任务中编写代码,任务一般独立起一个文件,这里为了方便,使用默认任务,在freertos.c文件中编辑