小学生
最后登录1970-1-1
在线时间 小时
注册时间2020-5-14
|
写了一个极简单的程序,控制一个LED灯的闪烁,Keil环境,使用FreeRTOS系统。烧录到板上后,发现LED灯没有按照预期的闪烁。任务应该是创建成功了,感觉好像是任务调度器没工作起来。请大家指导一下是啥原因。
#include "FreeRTOS.h"
#include "task.h"
#include "stm32f10x.h"
static void BSP_Init(void)
{
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
}
void LED_ON() //点亮LED
{
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
}
void LED_OFF() //关闭LED
{
GPIO_SetBits(GPIOB,GPIO_Pin_0);
}
/*********************LED任务函数*************************/
static void LED_Task()
{
while (1)
{
LED_ON();
vTaskDelay(500);
LED_OFF();
vTaskDelay(500);
}
}
static TaskHandle_t LED_Task_Handle = NULL; //创建LED任务句柄
int main(void)
{
BaseType_t xReturn = pdPASS;
BSP_Init(); //初始化硬件
/**********************************创建LED任务***********************************/
xReturn = xTaskCreate((TaskFunction_t )LED_Task, //任务入口函数
(const char* )"LED_Task", //任务名称
(uint16_t )512, //任务栈大小
(void* )NULL, //任务入口函数参数
(UBaseType_t )1, //任务的优先级
(TaskHandle_t* )&LED_Task_Handle); //任务控制块指针
if(pdPASS == xReturn)
{
vTaskStartScheduler(); //启动任务调度器
}
else
return -1;
while(1);
}
|
|