watershade 发表于 2017-6-1 09:51:48

onev 发表于 2017-5-27 10:35
多谢!如你所言,加上HAL_SPI_DMAStop()可以,不过加HAL_SPI_DMAPause()不行。

:) 解决了就好

chayishuang 发表于 2017-11-20 16:29:23

我在SPI回调函数中,添加HAL_SPI_DMAStop(),和HAL_SPI_Receive_DMA(),实际使能中断一次,请问楼主有碰到这个问题吗?

onev 发表于 2017-11-21 20:39:33

chayishuang 发表于 2017-11-20 16:29
我在SPI回调函数中,添加HAL_SPI_DMAStop(),和HAL_SPI_Receive_DMA(),实际使能中断一次,请问楼主有碰到这 ...

没太听懂你的意思

chayishuang 发表于 2017-11-23 19:09:05

SPI接收回调代码:
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
{
        HAL_SPI_DMAStop(hspi);
        if(HAL_SPI_Receive_DMA(hspi, REV_FPGA_DATA, 6)!= HAL_OK)
{
    /* Transfer error in transmission process */
    Error_Handler();
}
}
DMA初始化中的部分代码:
/* SPI1 DMA Init */
    /* SPI1_RX Init */
    hdma_spi1_rx.Instance = DMA2_Stream0;
    hdma_spi1_rx.Init.Channel = DMA_CHANNEL_3;
    hdma_spi1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_spi1_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_spi1_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_spi1_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_spi1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_spi1_rx.Init.Mode = DMA_NORMAL;
    hdma_spi1_rx.Init.Priority = DMA_PRIORITY_MEDIUM;
    hdma_spi1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_spi1_rx) != HAL_OK)
    {
      _Error_Handler(__FILE__, __LINE__);
    }
主函数中,初始化后,执行了一次        :
if(HAL_SPI_Receive_DMA(hspi, REV_FPGA_DATA, 6)!= HAL_OK)
{
    /* Transfer error in transmission process */
    Error_Handler();
}
结果是:只执行了一次dma

onev 发表于 2017-11-24 09:39:02

chayishuang 发表于 2017-11-23 19:09
SPI接收回调代码:
void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi)
{


你这岂不是一个无限循环不出来了?! 话说你的片选一直拉低的吗?

黑皮男 发表于 2018-1-24 17:44:46

楼主是不是用的从模式,我现在正在调试,遇到了这样的问题

onev 发表于 2018-1-27 14:02:42

黑皮男 发表于 2018-1-24 17:44
楼主是不是用的从模式,我现在正在调试,遇到了这样的问题

主                        
页: 1 [2]
查看完整版本: HAL库SPI DMA循环调用问题求教