你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM32cubemx 串口如何中断接收发来的不定长数据

[复制链接]
张亚飞 提问时间:2017-6-1 16:39 /
阅读主题, 点击返回1楼
收藏 评论47 发布时间:2017-6-1 16:39
47个回答
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[0] 开始。
张亚飞 回答时间:2017-6-3 20:54:09
安 发表于 2017-6-3 09:51
我改过是可以的。可以通过判断接收剩余字数,这样来确定当前已经接收到多少。 ...

能否贴一下代码,现在工程改的有点乱即使改对了也可能某个地方导致接收中断出现问题,间接导致改驱动不成功。 谢谢。
深谷幽泉 回答时间: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
这样改就会导致一直在收数据,执行一次就可以了。

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



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

Uart2Data 是 uint8_t UartData[20];
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版