硬汉嵌入式论坛

 找回密码
 立即注册
查看: 563|回复: 0
收起左侧

[客户分享] stm32的串口DMA发送函数,使用HAL库。必须开几个中断。

[复制链接]

334

主题

2032

回帖

3039

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3039
发表于 2023-6-2 13:43:17 | 显示全部楼层 |阅读模式
本帖最后由 caicaptain2 于 2023-6-2 16:58 编辑

串口收发是最基础的功能,用了很多次了,但是今天踩坑了。
今天使用cubemx配置了串口和DMA。但是没有打开串口中断,也没有打开DMA中断。 因为只需要DMA发送的简单功能。
用HAL_UART_Transmit_DMA() 简单的发送10个字符,大约几秒钟调用一次。。结果,只有第一次发送成功。后面都是失败,HAL函数返回的状态是busy。
但是,使用普通的串口发送函数HAL_UART_Transmit()却是完全正常的。


不甘心放弃DMA功能,反复折腾后发现,必须打开串口中断,同时必须打开串口发送的DMA中断。
而且HAL_UART_IRQHandler(&huart2);和HAL_DMA_IRQHandler(&hdma_usart2_tx);必须保留。
HAL库的串口DMA发送才能正常多次执行。


因为无需串口中断处理,也无需DMA完成中断处理,本来想着少开一些中断,避免无效的中断跳转,看来HAL库不能走捷径啊。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 18:27 , Processed in 0.209316 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表