目录

1.CubeMX配置

1.1开启freertos

1.2 添加任务

1.2.2 配置解释

1.3 结果呈现

2.编写业务代码

2.1 c文件代码编写(以UART4为例)

2.2 cpp文件代码编写(以LED为例)


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文件里面添加源文件的操作

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐