zhao.zhao 发表于 2017-6-3 10:44:31

张亚飞 发表于 2017-6-2 16:31
肯定是关了中断的,不然也不会每次在回调函数里边/HAL_UART_Receive_IT(&huart2,Uart2Data,1); 开启下一 ...

我觉得每次中断后,没有关闭中断,执行这个函数 HAL_UART_Receive_IT(&huart2,Uart2Data,1); 只是重新设置了下一个数据存放的位置还是从Uart2Data 开始。

张亚飞 发表于 2017-6-3 20:54:09

安 发表于 2017-6-3 09:51
我改过是可以的。可以通过判断接收剩余字数,这样来确定当前已经接收到多少。 ...

能否贴一下代码,现在工程改的有点乱即使改对了也可能某个地方导致接收中断出现问题,间接导致改驱动不成功。 谢谢。

yygkqzh 发表于 2017-6-4 09:53:36

https://www.stmcu.org.cn/module/forum/thread-611705-1-1.html这个帖子很详细

深谷幽泉 发表于 2017-6-4 19:19:12

DMA +空闲中断接收数据是正解,不过没试过你们说的cube库,我都是用的标准库

发表于 2017-6-5 08:57:30

我是把下面代码中的关闭中断部分 __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);去掉了。
if(--huart->RxXferCount == 0)
    {
      __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);

      /* Check if a transmit process is ongoing or not */
      if(huart->State == HAL_UART_STATE_BUSY_TX_RX)
      {
      huart->State = HAL_UART_STATE_BUSY_TX;
      }
      else
      {
      /* Disable the UART Parity Error Interrupt */
      __HAL_UART_DISABLE_IT(huart, UART_IT_PE);

      /* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
      __HAL_UART_DISABLE_IT(huart, UART_IT_ERR);

      huart->State = HAL_UART_STATE_READY;
      }
      HAL_UART_RxCpltCallback(huart);

      return HAL_OK;
    }

张亚飞 发表于 2017-6-5 09:06:32

深谷幽泉 发表于 2017-6-4 19:19
DMA +空闲中断接收数据是正解,不过没试过你们说的cube库,我都是用的标准库 ...

标准库的接收不用定长接收吧。

张亚飞 发表于 2017-6-5 09:37:32

安 发表于 2017-6-5 08:57
我是把下面代码中的关闭中断部分 __HAL_UART_DISABLE_IT(huart, UART_IT_RXNE);去掉了。
if(--huart->RxXf ...

这样改了有别的副作用吗? 比如影响发送。如果关闭了中断的话,那么接收完数据也就没必要再HAL_UART_Receive_IT(&huart1,&RxData,1); 执行这个函数开启下一次中断了吧。

发表于 2017-6-5 09:38:14

这样改就会导致一直在收数据,执行一次就可以了。

张亚飞 发表于 2017-6-5 10:35:34

安 发表于 2017-6-5 09:38
这样改就会导致一直在收数据,执行一次就可以了。

我是那么改的驱动,为什么就是不行呢。 怎么都做不到发送几个字节就收到几个字节。 下边我贴一下代码,您帮忙看下有问题嘛。






张亚飞 发表于 2017-6-5 10:37:29

张亚飞 发表于 2017-6-5 10:35
我是那么改的驱动,为什么就是不行呢。 怎么都做不到发送几个字节就收到几个字节。 下边我贴一下代码,您 ...

Uart2Data 是 uint8_t UartData;
页: 1 2 [3] 4 5
查看完整版本: 关于STM32cubemx 串口如何中断接收发来的不定长数据