一、Cubemx 配置
和事件组一样
时钟配置,f103c8t6标准板子只有高速,低速可以不用
打开板载led
usart1配置 选择异步,其他默认
freertos配置,版本选择v2,v1没有事件相关函数
生成工程
二、Timer
打开生成的FreeRTOS项目的主任务文件(通常是FreeRTOSConfig.h
)。
在文件中启用configUSE_TIMERS
宏,确保FreeRTOS定时器功能被启用。
freertos.c
重定向 和 头文件
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "usart.h"
#include "timers.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
int fputc(int ch,FILE *f)
{
HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);
return ch;
}
/* USER CODE END PTD */
定义句柄和回调函数
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
// 定时器句柄
TimerHandle_t myTimer;
// 定时器回调函数
void vTimerCallback(TimerHandle_t pxTimer) {
// 定时器到期时执行的代码
printf("Timer expired!\n");
}
/* USER CODE END FunctionPrototypes */
/* USER CODE END Header_StartDefaultTask */
void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN StartDefaultTask */
/* Infinite loop */
// 创建定时器
myTimer = xTimerCreate(
"MyTimer", // 定时器名称
pdMS_TO_TICKS(1000), // 定时器周期(以毫秒为单位)
pdTRUE, // 自动重新加载(pdTRUE)或一次性(pdFALSE)定时器
0, // 定时器 ID(在此示例中未使用)
vTimerCallback // 定时器回调函数
);
if (myTimer == NULL) {
// 定时器创建失败
printf("err . . .\r\n");
}
// 启动定时器
xTimerStart(myTimer, 0);
for(;;){
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);
osDelay(2000);
}
/* USER CODE END StartDefaultTask */
}
任务二闪烁小灯
void StartTask02(void *argument)
{
/* USER CODE BEGIN StartTask02 */
/* Infinite loop */
for(;;)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);// open led 1s
osDelay(1000);
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);// close led 1s
osDelay(1000);
}
/* USER CODE END StartTask02 */
}
运行效果
链接: https://pan.baidu.com/s/1FrwdtUZu89l6BrQ3WnhcNw?pwd=7jtr 提取码: 7jtr