完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在写STM32F405 DMA+空闲中断接收。用的USART3。
看了网上很多调试的帖子,但都不行。求帮忙! 1)我设置的BufferSize是16,必须要满足16个数后,才能触发我的空闲中断,且继续发送数据,偶尔会触发中断,但是接收DMA可正常工作,但是DMA_GetCurrDataCounter(DMA1_Stream1)与实际发送数据不符! 2)调整配置顺序,如先使能DMA,再配置USART,每次可以进中断,但是DMA不接收数据,接收寄存器一直为0,DR寄存器里显示是我发的一帧数据的第一个; 我的源程序如下,请帮我找找原因,已经调了很多天,但一直没办法解决。 |
|
相关推荐
1个回答
|
|
这个问题可能是由于DMA配置不正确导致的。
首先,确保USART的DMA模式配置正确。应将USART的接收模式设置为DMA模式,例如使用 HAL 库可以通过 `huart3.Init.Mode = UART_MODE_RX_DMA` 来实现。 其次,检查DMA配置是否正确。以下是一些常见的问题和解决方案: - 确保DMA流和通道号设置正确,例如使用 DMA1 的 Stream1 和 Channel4。 - 确保DMA流和通道都已使能,例如使用 `__HAL_RCC_DMA1_CLK_ENABLE()` 来使能 DMA1 时钟。 - 检查 DMA 配置的内存和外设地址设置是否正确。 - 配置 DMA 数据缓冲区大小时,确保设置正确的字节大小,例如使用 `hspi2.hdmarx->Instance->NDTR = BufferSize` 来设置缓冲区大小。 此外,还需要确保 USART 的空闲中断使能并正确配置。在空闲中断回调函数中,您可以使用 `DMA_GetCurrDataCounter(DMA1_Stream1)` 来获取当前 DMA 流当前剩余接收数据的字节数。 最后,通过使用调试器检查寄存器值和数据流来进一步调试问题。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
969 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
954 浏览 2 评论
2066 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1162 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1587 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 05:55 , Processed in 0.606613 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号