首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在STM32F1上使用HAL库永久启用uart RX中断

如何在STM32F1上使用HAL库永久启用uart RX中断
EN

Stack Overflow用户
提问于 2016-04-16 07:51:02
回答 4查看 14.9K关注 0票数 5

我看到HAL提供了以下函数来接收带有中断的串行数据:HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

这基本上设置了rx中断和返回。

一旦接收到的字节数达到Size,就会调用HAL_UART_RxCpltCallback()

HAL在执行此回调之前禁用rx中断

问题:

传入字节的数量是可变的(从1到~100),我需要将它们放入环形缓冲区。

因此,我将Size设置为1,并在回调中再次调用HAL_UART_Receive_IT()以重新启用中断,如果电路板偶尔收到1或2个字节的发送,它会工作得很好,但会遗漏超过1或2个字节的字节

我的猜测是它们被遗漏了,因为它们是在中断禁用-启用之间到达的

有没有一种方法可以让中断永远运行而不覆盖HAL Cube生成的代码?

如果不是,什么是覆盖相关函数的干净方法?

我是否遗漏了一些东西来避免寻找这个解决方案的需要?

EN

回答 4

Stack Overflow用户

发布于 2017-02-12 06:20:04

尝尝这个

代码语言:javascript
复制
__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);
票数 2
EN

Stack Overflow用户

发布于 2018-06-05 03:48:48

具有DMA(用于接收)的循环缓冲区似乎是满足您的需求的解决方案。这将始终提供RX中断(您只需配置它一次)。

对于类似的需求,我通常使用一个1字节的循环缓冲区来处理数据。接收处理将在ISR中完成。

票数 2
EN

Stack Overflow用户

发布于 2016-05-11 18:44:09

您可以通过轮询方法而不是中断方法来尝试UART。轮询方法: UART不会返回,直到它收到"Size“参数指定的数据量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36658544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档