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

HAL_UART_Receive_DMA 和 HAL_UART_Transmit_DMA 怎么用 在线等呢.

[复制链接]
Nick20150702 提问时间:2015-7-2 12:18 /
  HAL_UART_Receive_DMA
  HAL_UART_Transmit_DMA
通过UART接受数据,难道  要写一个 HAL_UART_Transmit_DMA 不停的轮询吗? 除了这样还有别的方法吗? 应该有类似中断的吧
现在就是在这个样用
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{

    if(HAL_UART_Receive_DMA(&huart2, (uint8_t *)(rx->buf+rx->tail), MAX_DATA) != HAL_OK)
    {
              Error_Handler();
    }


}

收藏 1 评论30 发布时间:2015-7-2 12:18

举报

30个回答
creep 回答时间:2015-7-2 17:15:06
Nick20150702 发表于 2015-7-2 17:12
那我想用 HAL_UART_Receive_DMA  接收数据 , 要怎么用啊?

1、初始化串口DMA
2、使能DMA中断
3、在串口DMA中断里面处理数据
creep 回答时间:2015-7-2 13:55:43
这个是串口DMA中断接收函数啊,绝对的非阻塞模式怎么会不停地额轮询呢。
接收完成后在DMA中断函数中处理数据即可。
creep 回答时间:2015-7-2 14:03:08
本帖最后由 creep 于 2015-7-2 14:07 编辑

下面这货才是阻塞接收,要不停的查询:
  1. HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
复制代码
而下面的这个就是一般的中断接收了,非阻塞模式
  1. HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
复制代码
建议使用上面的中断接收函数,所有数据接收完成后重载下面的函数进行处理:
  1. __weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
复制代码



Nick20150702 回答时间:2015-7-2 17:09:47
creep 发表于 2015-7-2 14:03
下面这货才是阻塞接收,要不停的查询:而下面的这个就是一般的中断接收了,非阻塞模式建议使用上面的中断接 ...

HAL_UART_Receive_IT 第一次使用在哪里?
用这个HAL_UART_RxCpltCallback,就不用再用HAL_UART_Receive_DMA 了吗?
Nick20150702 回答时间:2015-7-2 17:12:14
creep 发表于 2015-7-2 13:55
这个是串口DMA中断接收函数啊,绝对的非阻塞模式怎么会不停地额轮询呢。
接收完成后在DMA中断函数中处理数 ...

那我想用 HAL_UART_Receive_DMA  接收数据 , 要怎么用啊?
creep 回答时间:2015-7-2 17:17:33
Nick20150702 发表于 2015-7-2 17:09
HAL_UART_Receive_IT 第一次使用在哪里?
用这个HAL_UART_RxCpltCallback,就不用再用HAL_UART_Receive_DMA ...

接收数据的方法有3中:阻塞模式,(DMA中断),串口中断。
你可以直接使用串口中断接收,即调用HAL_UART_Receive_IT,然后在中断中处理数据。
Nick20150702 回答时间:2015-7-2 17:25:14
creep 发表于 2015-7-2 17:15
1、初始化串口DMA
2、使能DMA中断
3、在串口DMA中断里面处理数据

那我在处理数据时,还需要再调用HAL_UART_Receive_DMA 吗?
creep 回答时间:2015-7-2 17:37:31
Nick20150702 发表于 2015-7-2 17:25
那我在处理数据时,还需要再调用HAL_UART_Receive_DMA 吗?

不实用DMA接收就不需要这个函数了。
Nick20150702 回答时间:2015-7-2 17:45:15
creep 发表于 2015-7-2 17:37
不实用DMA接收就不需要这个函数了。

哎,可是还必须用这个.  所以是不是只能用我上边的做法啊?
1234下一页

所属标签

相似问题

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