调试STM32 SPI 通过DMA方式主从机通信,主机时钟和mosi信号波形都正常,出现从机接收数据出错的问题。这是因为DMA是直接内存读取数据,如果是主从机上电开始接收数据,数据接收不会出错。如果从机延迟接收数据或者说与主机时钟不同步会造成数据错位。如果谁有更好的办法控制DMA传输开关,可以一起交流学习。
这里只列举主机程序,
使能RCC时钟:
/*******************************************************************************
* Function Name : RCC_Configuration
* Description : RCC clock init
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void RCC_Configuration(void)
{
/*DMA2 clock enable*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
/*SPI3 clock enable*/
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC
|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_AFIO, ENABLE );
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
}
GPIO配置:
/* Configure SPI3 pins: SCK and MOSI */