radio2radio 发表于 2019-7-13 21:51:19

本帖最后由 radio2radio 于 2019-7-13 21:59 编辑

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。

mikecai 发表于 2019-7-15 09:49:24

while loop 前一句启动 HAL_UART_Receive_DMA(&huart2,ringBuf.pBuf,ringBuf.bufSize);
while loop 中:retval = ringBufPop(&userBuf,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 = 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 = 0;
                                                userPrt--;
                                        }                                               

                       }
                }
          }
页: 1 [2]
查看完整版本: HAL怎么写串口接收函数?