1、STM32F207使用SPI2收不到数据的问题
问:我使用STM32F207的SPI2控制模数转换器AD977时,STM32F207处理器的SPI2工作在单向只接收模式(从模式)下,我的SPI2总是接收不到数据(但在SPI2_MOSI管脚上有数据,时钟也有,我用示波器看的),请帮我分析一下。我的SPI及管脚配置如下:
voidSPI2_Config(void)
{
//NVIC_InitTypeDefNVIC_InitStructure;
/*EnabletheSPIclock*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
/*EnableGPIOclocks*/
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
/*ConnectSPIpinstoAF5*/
//GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2);
//GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2);
//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
//GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
//GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
//GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_DOWN;
/*SPISCKpinconfiguration*/
//GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
//GPIO_Init(GPIOB,&GPIO_InitStructure);
/*SPIMOSIpinconfiguration*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_DOWN;
//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
//GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;
GPIO_Init(GPIOB,&GPIO_InitStructure);
/*SPIconfiguration-------------------------------------------------------*/
SPI_I2S_DeInit(SPI2);
SPI_Cmd(SPI2,DISABLE);
SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode=SPI_Mode_Slave;
SPI_InitStructure.SPI_DataSize=SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA=SPI_CPHA_1Edge;
SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;
SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;
SPI2->CR1=0<<8;
SPI_Init(SPI2,&SPI_InitStructure);
//SPI_TIModeCmd(SPI2,ENABLE);
SPI_Cmd(SPI2,ENABLE);
}
答:GPIO的模式改为GPIO_Mode_AF_PP
1、关于STM32的SPI
问:SPI口,同步串行通信中的“同步”指的是什么?
答:同步,是指在通信过程中,被控制的对象与主机的时钟是相同的,都是由主机发出。
3、STM32F10XSPI时序疑惑
问:这两天学习了STM32F10X系列的SPI模块,发现其时序问题,感到非常疑惑:通过CPOL和CPHA两个位来控制收、发时序;根据时序图可以看出:发送、接收是在同一个时钟边沿采样!可是我接触过的所有使用SPI通信的外围芯片,发送和接受都是在不同的时钟边沿采样,这样的话,发送、接收肯定有一方采集到的数据存在错误的可能。目前正在调试开发板的SPI模块,和AT45DB161B通信,目前还没有成功,请高手指点!
答:SPI通讯的方式有3种、4线、3线、2线型。你使用的是那种情况?
答:4线全双工
答:你说的情况是不会发生的,这个你可以参考SPI4线的通讯方式。通讯不了,首先排除硬件问题,再次排除程序通讯问题。
4、使用SPI外设时如何设定NSS为通用IO口?
答:主模式和从模式下均可以由软件或硬件进行NSS管理;将SPI_CR1寄存器的SSM位置为1时,NSS引脚将被释放出来用作GPIO口;使用STM32软件库时,初始化SPI外设时,使用如下代码:SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;如果NSS引脚用于其他外设时,需要使能NSS输出:SPI_SSOutputCmd(SPIx,ENABLE);