| 这个工程只能收到一帧数据,后面的数据能进中断,进不了接收buff |
|
注释掉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); |
| 学习了 |
| 因为,我在你的工程上把UART中断去掉确实rx_buffer没有数据,我个人理解空闲中断应该只是判断RX口没有在接收数据了,但跟DR->rx_buffer是没什么直接联系的,所以请教一下问题在哪(捂脸) |
我的意思是只开HAL_UART_Receive_DMA(&UART1_Handler,rx_buffer,100);接收DR中数据,但不开空闲中断,按照DMA功能,DR的数据会一直往rx_buffer里面填吗,还是一定要通过RX中断来处理接收数据(楼主,我表达清楚了吗 ) |
PYC1 发表于 2021-12-18 09:35 接受buf是自己定义的一个数组 你没去把串口DR寄存器的数据存放到buf里 怎么会有数据?不处理数据只会在DR寄存器 |
| 请问,这个串口DMA接收数据,不开空闲中断(或者不开任何中断)接收数组里是不是也应该有数据呀 |
| 请问一下这个程序只能接受一帧数据是怎么回事呢? |
| 感谢分享 |
明月寄温柔 发表于 2020-3-17 15:02 MYDMA_Config(); //初始化DMA uart_init(115200); 试下了把DMA的初始化 放前面还是有这个问题 不过还是谢谢你 ![]() |
|
你好,身边只有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不清楚是不是这个原因 |
学习打卡![]() |
| 学习了 |
| 刚好用上,谢谢分享 |
| 帮顶,刚好需要,已经下载,谢谢了老师 |
|
您好,看了您的例程有几处不明白的地方想跟您请教。 问题一: 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, 是必须这样设置吗?设置成其他的中断优先级可以吗? |
| H743可以随便指定stream给外设,这样很方便,只需要明确请求channel就好了,那么可以把同一个stream分配给不同的外设吗? |
/1
|手机版|OpenEdv-开源电子网
( 粤ICP备12000418号-1 )
GMT+8, 2026-5-7 12:05
Powered by OpenEdv-开源电子网
© 2001-2030 OpenEdv-开源电子网