打印
[STM32F1]

SPI的DMA HAL库为什么要求TX RX都开启?

[复制链接]
804|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
spi, DMA, AN, ST, TE
本帖最后由 13400013591 于 2020-6-2 09:54 编辑

我看手册上明明说了(文末有截图),可以只用RX或者TX的DMA,但是这个库函数为什么用RX非要开启TX  DMA呢?
从这个函数的名字看,就只有收的功能,为什么非要判断一下TX?
HAL_SPI_Receive_DMA
因为我想做成普通发,DMA收,但是如果用HAL库就必须被迫开启TX DMA,开了也没得用处。
看代码意思是,双线模式,主机模式,就必须有TX DMA,但是手册明明说了没用TX DMA就可以不开啊。
双线模式,我普通发,DMA收,这样也是双线模式啊,怎么就非要判断TX DMA存在

求大佬讲讲这里是什么意思?


HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size)
  HAL_StatusTypeDef errorcode = HAL_OK;
  /* Check rx dma handle */
  assert_param(IS_SPI_DMA_HANDLE(hspi->hdmarx));
  if ((hspi->Init.Direction == SPI_DIRECTION_2LINES) && (hspi->Init.Mode == SPI_MODE_MASTER))
  {
    hspi->State = HAL_SPI_STATE_BUSY_RX;
    /* Check tx dma handle */
    assert_param(IS_SPI_DMA_HANDLE(hspi->hdmatx));为什么这里非要TX DMA检查呢?
/* Call transmit-receive function to send Dummy data on Tx line and generate clock on CLK line */
    return HAL_SPI_TransmitReceive_DMA(hspi, pData, pData, Size);


Screenshot from 2020-06-02 09-24-06.png (35.39 KB )

Screenshot from 2020-06-02 09-24-06.png

使用特权

评论回复
沙发
sonicll| | 2020-6-2 11:34 | 只看该作者
这个库函数的逻辑就是使用DMA发送一些dummy数据来产生时钟,然后DMA接收。如果你要自己控制发送,那应该不需要用这个函数,自己写段代码只配置SPI的接收DMA

使用特权

评论回复
板凳
香水城| | 2020-6-2 21:18 | 只看该作者

如果此时SPI做主又只做收,它才这样操作,通过发送dummy数据来实现接收。

如果不是做主角色的接收就不会走那里了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

56

帖子

1

粉丝