最近在做一个用一个
STM32的SPI作为主机,另一个STM32的spi作为从机,接收主机发送的数据,主机每次发送的数据大小是固定的,310位。
中断接收数据没有问题,但是发现当主机的速率提升到8M的时候,从机就接收不到数据了,于是想用SPI的DMA方式来接收数据。
最近调试的时候发现,用DMA方式一直接收不到数据(SPI->DR是有数据的)附配置代码,求大神指点!
void DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
DMA_HandleTypeDef hdma1;
__HAL_RCC_DMA1_CLK_ENABLE();
HAL_DMA_DeInit(&hdma1);
hdma1.Instance = DMA1_Channel2;
hdma1.Instance->CPAR = SPI1_DR_Addr;//ÍâÉèµØÖ·(uint32_t) 0x4001300C
hdma1.Instance->CMAR = (uint32_t)&SPI1_RX_buf; //memµØÖ·
hdma1.Instance->CNDTR = RX_TEMBUFFER_SIZE; //310´«Ê䳤¶È
hdma1.Instance->CCR &= ~(1<<14);//ʧÄÜM-M´«Êä
hdma1.Init.Request = DMA_REQUEST_2;
hdma1.Init.Direc
tion = DMA_PERIPH_TO_MEMORY;
hdma1.Init.MemDataAlignment = DMA_PDATAALIGN_WORD;
hdma1.Init.MemInc = DMA_MINC_ENABLE;
hdma1.Init.Mode = DMA_CIRCULAR;
hdma1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma1.Init.PeriphInc = DMA_PINC_DISABLE;
hdma1.Init.Priority = DMA_PRIORITY_VERY_HIGH;
HAL_DMA_Init(&hdma1);
SET_BIT(SPI1->CR2, SPI_CR2_RXDMAEN);
//SPI1->DR;
HAL_NVIC_SetPriority(DMA1_Channel2_3_IRQn,0,0);
HAL_NVIC_EnableIRQ(DMA1_Channel2_3_IRQn);
__HAL_DMA_ENABLE_IT(&hdma1,DMA_IT_TC);
__HAL_DMA_ENABLE_IT(&hdma1,DMA_IT_TE);
__HAL_DMA_ENABLE_IT(&hdma1,DMA_IT_HT);
__HAL_DMA_ENABLE(&hdma1);
0