中级会员
 
- 积分
- 419
- 金钱
- 419
- 注册时间
- 2015-4-14
- 在线时间
- 53 小时
|

楼主 |
发表于 2019-10-16 17:49:47
|
显示全部楼层
我要实现的是把 串口收到的数据用队列方式 同步到任务中。
void Uart_ReceiveData(UartType* pUart, u8 *pBuffer, u8 len, QueueHandle_t Queue)
{
static u16 cnt = 0;
HAL_StatusTypeDef err;
BaseType_t xHigherPriorityTaskWoken;
if((__HAL_UART_GET_FLAG(Uart_Handle[pUart->pUartGpio->Uart_ID],UART_FLAG_RXNE)!=RESET))
{
if(HAL_OK == HAL_UART_Receive(Uart_Handle[pUart->pUartGpio->Uart_ID],pBuffer, 1, 1000))
{
if(Queue!=NULL&&xQueueIsQueueFullFromISR(Queue)!=pdTRUE)
{
if(xQueueSendFromISR(Queue,pBuffer,&xHigherPriorityTaskWoken))
memset(pBuffer,0,len);
portYIELD_FROM_ISR(xHigherPriorityTaskWoken); //注释掉后会造成接收时丢包
}
}
}
}
void RS232_USART_IRQ(void)
{
Uart_ReceiveData(&RS232Uart,RS232_RcvData,RS232_LEN,RS232_Queue);
}
void RS232_Handle(void)
{
u8 data[RS232_LEN+1];
memset(data,0,RS232_LEN+1);
if(xQueueReceive(RS232_Queue,data,portMAX_DELAY))
{
printf("RS232 rcv is : %s \r\n",data);
}
}
|
|