目前可以收到GPS数据,但是收到的数据不完整,收到的数据顺序不对,这是怎么回事?
void uart5_init(u32 bound)
{
//UART 3õê¼»ˉéèÖÃ
UART5_Handler.Instance=UART5; //UART5
UART5_Handler.Init.BaudRate=bound; //2¨ìØÂê
UART5_Handler.Init.WordLength=UART_WORDLENGTH_8B; //×Ö3¤Îa8λêy¾Y¸ñê½
UART5_Handler.Init.StopBits=UART_STOPBITS_1; //ò»¸öí£Ö1λ
UART5_Handler.Init.Parity=UART_PARITY_NONE; //ÎTÆæżD£Ñéλ
UART5_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE; //ÎTó2¼tá÷¿Ø
UART5_Handler.Init.Mode=UART_MODE_TX_RX; //êÕ·¢Ä£ê½
HAL_UART_Init(&UART5_Handler); //HAL_UART_Init()»áê1ÄüUART5
HAL_UART_Receive_IT(&UART5_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);//¸Ãoˉêy»á¿aÆô½óêÕÖD¶Ï£o±ê־λUART_IT_RXNE£¬2¢ÇòéèÖýóêÕ»o3åòÔ¼°½óêÕ»o3å½óêÕ×î′óêy¾Yá¿
__HAL_LINKDMA(&UART5_Handler,hdmarx,uart5_rx_dma_handler); //½«DMAóëUSART1áaÏμÆeà′(½óêÕDMA)
uart5_rx_dma_handler.Instance = DMA1_Stream0;
uart5_rx_dma_handler.Init.Channel = DMA_CHANNEL_4;
uart5_rx_dma_handler.Init.Direction = DMA_PERIPH_TO_MEMORY;
uart5_rx_dma_handler.Init.PeriphInc = DMA_PINC_DISABLE;
uart5_rx_dma_handler.Init.MemInc = DMA_MINC_ENABLE;
uart5_rx_dma_handler.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
uart5_rx_dma_handler.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
uart5_rx_dma_handler.Init.Mode = DMA_CIRCULAR;
uart5_rx_dma_handler.Init.Priority = DMA_PRIORITY_MEDIUM;
uart5_rx_dma_handler.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
uart5_rx_dma_handler.Init.FIFOThreshold=DMA_FIFO_THRESHOLD_FULL;
uart5_rx_dma_handler.Init.MemBurst=DMA_MBURST_SINGLE; //′æ′¢Æ÷í»·¢μ¥′Î′«êä
uart5_rx_dma_handler.Init.PeriphBurst=DMA_PBURST_SINGLE; //íaéèí»·¢μ¥′Î′«êä
HAL_DMA_DeInit(&uart5_rx_dma_handler);
HAL_DMA_Init(&uart5_rx_dma_handler);
HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 2, 1);
HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
__HAL_DMA_ENABLE(&uart5_rx_dma_handler);
HAL_UART_Receive_DMA(&UART5_Handler,UART5_RX_BUF,UART5_MAX_RECV_LEN); //Æô¶ˉ½óêÕ
}
//′®¿ú5ÖD¶Ï·tÎñ3ìDò
void UART5_IRQHandler(void)
{
u16 res;
#if SYSTEM_SUPPORT_OS //ê1óÃOS
OSIntEnter();
#endif
if((__HAL_UART_GET_FLAG(&UART5_Handler,UART_FLAG_IDLE)!=RESET))
{
res = UART5->RDR;
HAL_UART_IRQHandler(&UART5_Handler);
__HAL_UART_CLEAR_IDLEFLAG(&UART5_Handler);
__HAL_UART_CLEAR_IT(&UART5_Handler,UART_FLAG_IDLE);
// HAL_UART_DMAStop(&UART5_Handler);
if(__HAL_DMA_GET_FLAG(&uart5_rx_dma_handler,DMA_FLAG_TCIF0_4))//μè′yDMA2_Steam7′«êäíê3é
{
__HAL_DMA_CLEAR_FLAG(&uart5_rx_dma_handler,DMA_FLAG_TCIF0_4);//Çå3yDMA2_Steam7′«êäíê3é±êÖ¾
HAL_UART_DMAStop(&UART5_Handler); //′«êäíê3éòÔoó1رÕ′®¿úDMA
}
res=UART5_MAX_RECV_LEN-(__HAL_DMA_GET_COUNTER(&uart5_rx_dma_handler));
printf("RX-count:%d
",res);
HAL_UART_Receive_DMA(&UART5_Handler,UART5_RX_BUF,UART5_MAX_RECV_LEN); //Æô¶ˉ½óêÕ
UART5_RX_STA=1;
}
HAL_UART_IRQHandler(&UART5_Handler);
#if SYSTEM_SUPPORT_OS //ê1óÃOS
OSIntExit();
#endif
}
#endif
//-------------------------------------------DMA1-------------------------------------------------------------------------------------------------------------------
void DMA1_Stream0_IRQHandler(void)
{
#if SYSTEM_SUPPORT_OS //ê1óÃOS
OSIntEnter();
#endif
HAL_DMA_IRQHandler(&uart5_rx_dma_handler);
HAL_UART_DMAStop(&UART5_Handler);
HAL_UART_Receive_DMA(&UART5_Handler,UART5_RX_BUF,UART5_MAX_RECV_LEN); //Æô¶ˉ½óêÕ
#if SYSTEM_SUPPORT_OS //ê1óÃOS
OSIntExit();
#endif
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
已解决,是我的res变量没有赋初值
一周热门 更多>