放假沒事的時候自己學習了下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)
2023-4-10 16:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|