|
大佬们,我用freertos创建2个串口控制上位机的任务,但是2个串口只能有一个能工作,单独测试的时候都没问题,串口接收是用中断去接收的
void WIFI_Task(void *Params)
{
while (1)
{
if (WIFI_RX_STA & 0x8000)
{
if(WIFI_MP3_State() == 0)
{
if (strstr((const char *)WIFI_RX_BUF, "Trash1"))
{
MP3_Star(03);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET);
}
if (strstr((const char *)WIFI_RX_BUF, "Trash2"))
{
MP3_Star(04);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET);
}
WIFI_MP3_State() == 1;
// vTaskDelay(10);
// vTaskDelete(NULL);
}
memset(WIFI_RX_BUF, 0, 600); // 将接收区清0
WIFI_RX_STA = 0; // WIFI模块标志位清零
}
}
}
void BlueTooth_Task(void *Params)
{
while(1)
{
if (BlueTooth_RxFlag == 1) // 蓝牙接收到手机发送的数据时
{
switch (BlueTooth_RxData)
{
if (BlueTooth_MP3_State() == 0)
{
case '1':
MP3_Star(04);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_RESET);
break;
case '2':
MP3_Star(03);
GPIO_WriteBit(GPIOA, GPIO_Pin_4, Bit_SET);
break;
default:
break;
}
BlueTooth_MP3_State() == 1;
// vTaskDelay(10);
// vTaskDelete(NULL);
}
BlueTooth_RxFlag = 0; // 蓝牙模块标志位清零
}
}
}
void Start_Task(void *Param)
{
LED_Init();
MP3_Init();
WIFI_Init();
BlueTooth_Init();
taskENTER_CRITICAL(); // 进入临界区
xTaskCreate((TaskFunction_t)WIFI_Task, // 任务函数名
(const char *)"WIFI_Task", // 任务名称(字符串)
(configSTACK_DEPTH_TYPE)256, // 任务堆栈大小(128/...)
(void *)NULL, // 任务传递参数(NULL/...)
(UBaseType_t)1, // 任务优先级
(TaskHandle_t *)NULL // 任务句柄
);
xTaskCreate((TaskFunction_t)BlueTooth_Task, // 任务函数名
(const char *)"BlueTooth_Task", // 任务名称(字符串)
(configSTACK_DEPTH_TYPE)256, // 任务堆栈大小(128/...)
(void *)NULL, // 任务传递参数(NULL/...)
(UBaseType_t)1, // 任务优先级
(TaskHandle_t *)NULL // 任务句柄
);
taskEXIT_CRITICAL(); // 退出临界区
vTaskDelete(NULL); // 不加无法运行
}
int main(void)
{
xTaskCreate((TaskFunction_t)Start_Task, // 任务函数名
(const char *)"Start_Task", // 任务名称(字符串)
(configSTACK_DEPTH_TYPE)512, // 任务堆栈大小(128/...)
(void *)NULL, // 任务传递参数(NULL/...)
(UBaseType_t)2, // 任务优先级
(TaskHandle_t *)NULL // 任务句柄
);
vTaskStartScheduler(); // 开启任务调度器
}
|
|