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

STM32 Cubx HAL库 UART问题

[复制链接]
deanquan 提问时间:2015-8-11 10:50 /
查看HAL库UART文件,发现UART中断里面的处理都是根据UART传的一个全局结构变量来处理的。void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);

我要处理UART的发送和接收。发送部分我可以理解,接收部分就让人郁闷了。

static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart)

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;
    }


这个一定要接收固定数目的字符后才会关闭接收中断,如果发送10个字符,接收10个字符,这样处理很OK。但是发送是可以确定的,
接收的个数是不确定的。官方的库这么死板吗?还是我理解错了。请大侠帮忙分析下,谢谢!
收藏 评论8 发布时间:2015-8-11 10:50

举报

8个回答
creep 回答时间:2015-8-11 11:17:02
是的,你理解的没错,HAL库就是这么强势。串口接收数据个数不固定时可以试试空闲中断的方式。
jcx0324 回答时间:2015-8-11 11:23:00
对HAL库表示无爱,不够灵活
deanquan 回答时间:2015-8-11 11:28:53
creep 发表于 2015-8-11 11:17
是的,你理解的没错,HAL库就是这么强势。串口接收数据个数不固定时可以试试空闲中断的方式。 ...

意思是我要自己在中断里面像以前库那样处理吗?
BG4RFF 回答时间:2015-8-11 13:44:00
您可以没接收一个中断啊,然后放到缓存里,然后看你怎么处理喽
creep 回答时间:2015-8-11 14:00:38
deanquan 发表于 2015-8-11 11:28
意思是我要自己在中断里面像以前库那样处理吗?

HAL库也可以使用串口空闲中断+DMA接收不定长数据。
deanquan 回答时间:2015-8-11 14:08:57
creep 发表于 2015-8-11 14:00
HAL库也可以使用串口空闲中断+DMA接收不定长数据。

这个要怎么用,还请帮忙详细叙述下,谢谢!
creep 回答时间:2015-8-11 14:21:11
deanquan 发表于 2015-8-11 14:08
这个要怎么用,还请帮忙详细叙述下,谢谢!

论坛有人分享过了,你先参考下,有问题再讨论!
Cube下实现串口+DMA+空闲中断接收不定长数据
deanquan 回答时间:2015-8-11 14:33:36
谢谢大家的回复!
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版