你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
sos博 发表于 2019-7-13 21:34 哦,我学你那个,然后把flag=1放到HAL_UART_RxCpltCallbacki里面了,我DMA_RX_BUFFER_SIZE也学习你的先写 ...
如果不是必须,建议不使用DMA方式,中断方式的很清晰。
在DMA里面的中断处理的这一句:
temp = hdma_usart1_rx.Instance->CNDTR;
rx_len1 = BUFFER_SIZE - temp;
应该在这里搞定 rx_flag=1。
while loop 中:retval = ringBufPop(&userBuf[userPrt],50-userPrt,&ringBuf,&hdma_usart2_rx);
if(retval) //收到数据 get responde
{
userPrt+=retval;
uart2PrevTick = HAL_GetTick();
if(userPrt > 10 ) // data respond data 1/3 buffer ,print it
{
HAL_UART_Transmit(&hlpuart1,userBuf,userPrt,10);
while(userPrt !=0) //clean buffer
{
userBuf[userPrt] = 0;
userPrt--;
}
}
}
else //idle 没收到DMA
{
if (0!= userPrt)
{
if((HAL_GetTick()-uart2PrevTick) >= 10) // 间隔时间大于 10ms【对9600 波特率】,那就是单条命令接收 已完成
{
HAL_UART_Transmit(&hlpuart1,userBuf,userPrt,10); //print receive data by hlpuart1
ParseData();// 解析数据
while(userPrt !=0) //clean buffer
{
userBuf[userPrt] = 0;
userPrt--;
}
}
}
}