【STM32+HAL库】 Rreertos配置
摘要:本文介绍了使用STM32CubeMX配置FreeRTOS(V1版本)的基本步骤,包括创建任务(设置名称、优先级和入口函数)和编写业务代码。以UART4和LED为例,展示了C和C++文件中的任务实现方法:UART4任务使用阻塞式串口发送系统时钟信息,LED任务实现GPIO翻转控制。重点提示了FreeRTOS中应优先使用osDelay()而非HAL_Delay(),以及C++代码需用extern
·
目录
1.CubeMX配置
1.1开启freertos

选择V1版本。V2适用于更加复杂的单片机项目

1.2 添加任务
点击Add添加任务

1.2.2 配置解释

| 名称 | 含义 |
|---|---|
| Task Name | 任务名称 |
| Priority | 优先级 |
| Entry Function | 函数名,也就是你在工程里面要使用的函数 |
| Code Generation Option | 代码生成选择 |
任务名根据个人需求写
优先级可以配置成较低,这与任务的轻重缓急有关。如果没有多余任务,可以默认配置成低
函数类型选择外部external即可。

1.3 结果呈现

2.编写业务代码
2.1 c文件代码编写(以UART4为例)
在Usart.c文件里面写入串口发送函数
/* USER CODE BEGIN 1 */
void StartUart4_Print(void const * argument) {
char message[100];
while (1) {
uint32_t tick=xTaskGetTickCount();//获取系统时钟
sprintf(message,"Tick:%lu\r\n",tick);
HAL_UART_Transmit(&huart4,(uint8_t *)message,strlen(message),100);
osDelay(1000);
}
}
/* USER CODE END 1 */
在usart.h文件里面声明函数
/* USER CODE BEGIN Prototypes */
extern void StartUart4_Print(void const * argument);
/* USER CODE END Prototypes */
这样配置基本完成了。
在freertos里面,串口尽量使用阻塞式发送,非阻塞式(如中断、DMA)配置起来比较麻烦,这里不赘述。
2.2 cpp文件代码编写(以LED为例)
在LED.cpp文件里面写入LED翻转函数
extern "C" void StartLED_Task(void const * argument) {
while (1) {
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
osDelay(500);
}
}
在LED.H文件里面声明函数
extern "C" void StartLED_Task(void const * argument);
主要是在函数面前添加extern "C",这样可以让单片机知道将c++以C语言对待
osDelay()是freertos里面常用的延时函数,尽量用这个去替代HAL_Delay()
我这里省略了在CMakeLists.txt文件里面添加源文件的操作
更多推荐



所有评论(0)