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

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
  1. 修改main.h添加如下
       #include "FreeRTOS.h"
       #include "task.h"
  1. 添加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);	 
       
       }
  1. 任务创建
  static void AppTaskCreate (void)
       {
       		xTaskCreate(vTaskLED0,    					//任务函数
       							 "vTaskLED0",   		//任务名称
       							 512,         			//堆栈大小
       							 NULL,        			//任务参数	
       							 1,           			//任务优先级	
       							 &xHandleTaskLED0 ); 	//任务句柄
       										 
       		xTaskCreate(vTaskLED1,    		
       							 "vTaskLED1",  		
       							 512,         		
       							 NULL,        		
       							 1,           		
       							 &xHandleTaskLED1 );
       }								 
       
  1. 创建任务控制块,这里指的注意的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);
   	}
   }
  1. 函数声明和任务句柄声明
 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移植成功了。

你可能感兴趣的:(FreeRTOS基础教程)