OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...

阿波罗H743串口DMA接收及发送+空闲中断

查看数: 13115 | 评论数: 17 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-5-9 16:38

正文摘要:

定义两个BUF 一个用于接收:uint8_t rx_buffer[100];                     一个用于发送:uint8_t tx_buffer[10] = {"ALIENTEK\r\n"}; ...

回复

DXH99 发表于 2022-9-6 17:09:07
这个工程只能收到一帧数据,后面的数据能进中断,进不了接收buff
lvfb 发表于 2025-9-2 16:30:57
注释掉void uart_init(u32 bound)中的最后三行
//        __HAL_UART_ENABLE_IT(&UART1_Handler, UART_IT_IDLE);          //开启空闲接收中断
//        __HAL_UART_CLEAR_IDLEFLAG(&UART1_Handler);  //清除标志位
//        HAL_UART_Receive_DMA(&UART1_Handler,rx_buffer,BUFFER_SIZE);        //打开DMA接收,指定接收缓存区和接收大小
函数void MYDMA_Config(void)最后添加
__HAL_UART_ENABLE_IT(&UART1_Handler, UART_IT_IDLE);
HAL_UART_Receive_DMA(&UART1_Handler, rx_buffer, BUFFER_SIZE);   
313235551 发表于 2025-5-2 00:01:14
学习了
PYC1 发表于 2021-12-18 11:39:13
因为,我在你的工程上把UART中断去掉确实rx_buffer没有数据,我个人理解空闲中断应该只是判断RX口没有在接收数据了,但跟DR->rx_buffer是没什么直接联系的,所以请教一下问题在哪(捂脸)
PYC1 发表于 2021-12-18 11:35:51
我的意思是只开HAL_UART_Receive_DMA(&UART1_Handler,rx_buffer,100);接收DR中数据,但不开空闲中断,按照DMA功能,DR的数据会一直往rx_buffer里面填吗,还是一定要通过RX中断来处理接收数据(楼主,我表达清楚了吗
翼行园子 发表于 2021-12-18 11:31:03
PYC1 发表于 2021-12-18 09:35
请问,这个串口DMA接收数据,不开空闲中断(或者不开任何中断)接收数组里是不是也应该有数据呀

接受buf是自己定义的一个数组 你没去把串口DR寄存器的数据存放到buf里 怎么会有数据?不处理数据只会在DR寄存器
PYC1 发表于 2021-12-18 09:35:15
请问,这个串口DMA接收数据,不开空闲中断(或者不开任何中断)接收数组里是不是也应该有数据呀
cony17 发表于 2021-9-23 19:48:45
请问一下这个程序只能接受一帧数据是怎么回事呢?
zebiaolee 发表于 2021-8-5 11:36:56
感谢分享
翼行园子 发表于 2020-3-18 16:19:01
明月寄温柔 发表于 2020-3-17 15:02
你好,身边只有F429的板子,有空正好调试了下,关于这个问题:
if(timer!=1)   /*由于开启空闲中断的时候 ...

  MYDMA_Config();                                //初始化DMA
        uart_init(115200);                        试下了把DMA的初始化  放前面还是有这个问题  不过还是谢谢你
明月寄温柔 发表于 2020-3-17 15:02:30
你好,身边只有F429的板子,有空正好调试了下,关于这个问题:
if(timer!=1)   /*由于开启空闲中断的时候会进入一次中断导致第一次会将recv_end_flag置一 触发DMA串口发送*/
main()函数中DMA接收在DMA初始化之前
void uart_init(u32 bound)
{
    HAL_UART_Receive_DMA(&UART1_Handler,rx_buffer,BUFFER_SIZE);       
}
这个在初始化 MYDMA_Config();之前。导致第一次DMA传输不正确?

在F4上是这样的,F7不清楚是不是这个原因



明月寄温柔 发表于 2020-3-16 19:24:24
学习打卡
0xaa 发表于 2020-3-15 15:32:15
学习了
gorizi 发表于 2019-12-31 15:01:47
刚好用上,谢谢分享
mm275861 发表于 2019-12-28 08:37:39
帮顶,刚好需要,已经下载,谢谢了老师
fengqiyunyong52 发表于 2019-12-26 10:53:11
您好,看了您的例程有几处不明白的地方想跟您请教。
问题一:
HAL_Init()中使用了HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);进行中断分组。
这样后面再使用
HAL_NVIC_EnableIRQ(USART1_IRQn);                                //使能USART1中断通道
HAL_NVIC_SetPriority(USART1_IRQn,3,3);                        //抢占优先级3,子优先级3
是不是不太合适呢?
这里子优先级不是只能设置为0吗?

问题二:
HAL_NVIC_SetPriority(DMA2_Stream7_IRQn,0,0);
HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn);
HAL_NVIC_SetPriority(DMA2_Stream6_IRQn,0,0);
HAL_NVIC_EnableIRQ(DMA2_Stream6_IRQn);
中断优先级设置都是0,0, 是必须这样设置吗?设置成其他的中断优先级可以吗?
Milo 发表于 2019-9-23 17:52:47
H743可以随便指定stream给外设,这样很方便,只需要明确请求channel就好了,那么可以把同一个stream分配给不同的外设吗?



关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

如发现本坛存在违规或侵权内容, 请点击这里发送邮件举报 (或致电020-38271790)。请提供侵权说明和联系方式。我们将及时审核依法处理,感谢配合。

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2026-5-7 12:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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