FreeRTOS基础教程1:FreeRTOS移植到STM32F103和LED演示

it2022-05-05  151

FreeRTOS_Transplant_Blinks Readme

1. 该工程主要用于介绍FreeRTOS移植过程,并建立2个Led任务运行来演示移植成功 2. 移植过程中FreeRTOS移植到工程的过程在此滤过,详情百度一下。 3. 工程建立完成后将中断和时钟相关宏放置在FreeRTOSConfig.h文件中,这里是关键 4. /* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS standardnames. */ #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler 修改main.h添加如下 #include "FreeRTOS.h" #include "task.h" 添加Led硬件初始化 void LED_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( macLED1_GPIO_CLK|macLED2_GPIO_CLK, ENABLE); GPIO_InitStructure.GPIO_Pin = macLED1_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(macLED1_GPIO_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = macLED2_GPIO_PIN; GPIO_Init(macLED2_GPIO_PORT, &GPIO_InitStructure); GPIO_SetBits(macLED1_GPIO_PORT, macLED1_GPIO_PIN); GPIO_SetBits(macLED2_GPIO_PORT, macLED2_GPIO_PIN); } 任务创建 static void AppTaskCreate (void) { xTaskCreate(vTaskLED0, //任务函数 "vTaskLED0", //任务名称 512, //堆栈大小 NULL, //任务参数 1, //任务优先级 &xHandleTaskLED0 ); //任务句柄 xTaskCreate(vTaskLED1, "vTaskLED1", 512, NULL, 1, &xHandleTaskLED1 ); } 创建任务控制块,这里指的注意的Led的延时更换成vTaskDelay(500)该延时 void vTaskLED0(void *pvParameters) { while(1) { LED0( ON ); vTaskDelay(500); LED0( OFF ); vTaskDelay(500); } } void vTaskLED1(void *pvParameters) { while(1) { LED1( ON ); vTaskDelay(1000); LED1( OFF ); vTaskDelay(1000); } } 函数声明和任务句柄声明 static void vTaskLED0(void *pvParameters); static void vTaskLED1(void *pvParameters); static void AppTaskCreate (void); static TaskHandle_t xHandleTaskLED0 = NULL; static TaskHandle_t xHandleTaskLED1 = NULL;

10.主函数

int main(void) { /*LED硬件初始化*/ LED_GPIO_Config(); /*任务创建*/ AppTaskCreate(); /*启动调度器*/ vTaskStartScheduler(); while (1); }

11.编译下载既可以看到2个led亮,FreeRTOS移植成功了。


最新回复(0)