放假没事的时候自己学习了下freertos和蓝牙小程序这个程序是通过蓝牙下发命令来控制ws2812 led
同时也学习了下串口环形列队
这个小程序由于没有在这个电脑,需要的可以留言
下面这个是数据处理的task,完全是新手
void rev_data_task(void)
{
u8 mode = 0xff;
u8 flag1=0;
u8 flag2=0;
u8 flag3=0;
int size =0;
while(1){
size = find_screen_cmd(screen_cmd_buffer);
if(size != 0)
{
rev_data = (PT_REDATA)screen_cmd_buffer;
switch(rev_data->mode)
{
case 1:
mode = rev_data->mode;
if(flag1==1)
break;
taskENTER_CRITICAL();
flag1=1;
flag2=0;
flag3=0;
if(mode1_task_handler!=NULL)
{
vTaskDelete(mode1_task_handler);
mode1_task_handler=NULL;
}
if(mode2_task_handler!=NULL)
{
vTaskDelete(mode2_task_handler);
mode2_task_handler=NULL;
}
if(mode3_task_handler!=NULL)
{
vTaskDelete(mode3_task_handler);
mode3_task_handler=NULL;
}
xTaskCreate((TaskFunction_t)rgb_mode1, "mode1", 1024, NULL, 2, (TaskHandle_t*)&mode1_task_handler);
taskEXIT_CRITICAL();
Led_Set(1);
memset(screen_cmd_buffer,0,CMD_MAX_BUFFER);
vTaskDelay(10);
break;
case 2:
mode = rev_data->mode;
if(flag2==2)
break;
taskENTER_CRITICAL();
flag2=2;
flag1=0;
flag3=0;
if(mode1_task_handler!=NULL)
{
vTaskDelete(mode1_task_handler);
mode1_task_handler=NULL;
}
if(mode2_task_handler!=NULL)
{
vTaskDelete(mode2_task_handler);
mode2_task_handler=NULL;
}
if(mode3_task_handler!=NULL)
{
vTaskDelete(mode3_task_handler);
mode3_task_handler=NULL;
}
xTaskCreate((TaskFunction_t)rgb_mode2, "mode2", 1024, NULL, 2, (TaskHandle_t*)&mode2_task_handler);
taskEXIT_CRITICAL();
Led_Set(1);
memset(screen_cmd_buffer,0,CMD_MAX_BUFFER);
vTaskDelay(10);
break;
case 3:
mode = rev_data->mode;
if(flag3==3)
break;
taskENTER_CRITICAL();
flag3=3;
flag1=0;
flag2=0;
if(mode1_task_handler!=NULL)
{
vTaskDelete(mode1_task_handler);
mode1_task_handler=NULL;
}
if(mode2_task_handler!=NULL)
{
vTaskDelete(mode2_task_handler);
mode2_task_handler=NULL;
}
if(mode3_task_handler!=NULL)
{
vTaskDelete(mode3_task_handler);
mode3_task_handler=NULL;
}
xTaskCreate((TaskFunction_t)rgb_mode3, "mode3", 1024, NULL, 2, (TaskHandle_t*)&mode3_task_handler);
taskEXIT_CRITICAL();
Led_Set(1);
memset(screen_cmd_buffer,0,CMD_MAX_BUFFER);
vTaskDelay(10);
break;
default:
mode = rev_data->mode;
taskENTER_CRITICAL();
flag1=0;
flag2=0;
flag3=0;
if(mode1_task_handler!=NULL)
{
vTaskDelete(mode1_task_handler);
mode1_task_handler=NULL;
}
if(mode2_task_handler!=NULL)
{
vTaskDelete(mode2_task_handler);
mode2_task_handler=NULL;
}
if(mode3_task_handler!=NULL)
{
vTaskDelete(mode3_task_handler);
mode3_task_handler=NULL;
}
set_all_led (0,0,0);
taskEXIT_CRITICAL();
Led_Set(1);
memset(screen_cmd_buffer,0,CMD_MAX_BUFFER);
vTaskDelay(10);
break;
}
}
Led_Set(0);
vTaskDelay(10);
}
}
Keil代码下载(注意附件只有STM32代码,不含其他任何资料):
STM32单片机代码ws2812-c8t6.7z
(327.51 KB, 下载次数: 52)
|