你阿️ 2023-11-21 20:29 采纳率: 0%
浏览 214
已结题

TIM_DMA_Update事件循环触发DMA来spi发送数据方案可行吗?

https://blog.csdn.net/ybhuangfugui/article/details/103286393
参考上面的帖子,想做一个TIM_DMA_Update事件循环触发DMA来spi发送数据
但是spi_tx没有数据发出,HAL_DMA_Start(&hdma_tim3_ch4_up,(uint32_t)Master_TxBuffer,(uint32_t)SPI1->DR,1);
想问一下各位大咖们,这样能直接将数据从spi传出吗?

  • 写回答

13条回答 默认 最新

  • 叫兽-郭老师 新星创作者: Java技术领域 2023-11-21 22:35
    关注
    获得0.75元问题酬金

    由人工智能和答主提供,可以参考如下,如果回答的不正确,及时评论区回复,我追加回答,谢谢。
    你描述的方案涉及使用TIM(定时器)的DMA更新事件触发DMA传输SPI数据,这样的方案是可行的,但是需要确保你的代码正确配置了TIM、DMA、和SPI。

    在你的描述中,使用HAL_DMA_Start启动DMA传输是正确的。但是有一点需要注意,这里的目的地址应该是SPI数据寄存器(SPI1->DR),而不是SPI1->DR的地址。因为在使用DMA传输SPI数据时,DMA的目的地址应该是外设的数据寄存器,而不是内存地址。

    你的代码片段中的这一行:

    HAL_DMA_Start(&hdma_tim3_ch4_up, (uint32_t)Master_TxBuffer, (uint32_t)SPI1->DR, 1);
    

    应该改为:

    HAL_DMA_Start(&hdma_tim3_ch4_up, (uint32_t)Master_TxBuffer, (uint32_t)&SPI1->DR, 1);
    

    注意到这里的&SPI1->DR,表示目的地址是SPI1->DR的地址。

    另外,请确保你的TIM、DMA、和SPI的初始化都正确。确保TIM配置为生成更新事件,并确保DMA与TIM通道连接,触发更新事件。此外,SPI的配置也需要正确,以确保可以通过DMA发送数据。

    如果你的代码在使用DMA传输SPI数据时仍然遇到问题,建议逐步检查你的配置,确保每个模块都正确初始化和配置。你也可以查看STM32的参考手册和相关库的文档,以确保你的配置符合要求。

    评论

报告相同问题?

问题事件

  • 系统已结题 11月29日
  • 创建了问题 11月21日