正确的波形应该是这样的(用双向是正确的):MODE两种模式下,发送的数据是紧紧跟随的
但用了SPI_Direction_1Line_Tx模式时,波形就慢了:
初始化是这样的:
[mw_shl_code=c,true]void SPI1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_7);
SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
} [/mw_shl_code]
发送函数:
[mw_shl_code=c,true]void SPI1_ReadWriteByte(u16 TxData)
{
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1, TxData);
}[/mw_shl_code]
MODE的操作是这样的:
[mw_shl_code=c,true] MODE=1;
SPI1_ReadWriteByte(DC[0]);
SPI1_ReadWriteByte(DC[1]);
SPI1_ReadWriteByte(DC[2]);
SPI1_ReadWriteByte(DC[3]);
SPI1_ReadWriteByte(DC[4]);
SPI1_ReadWriteByte(DC[5]);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}
MODE=0;
SPI1_ReadWriteByte(GS[0]);
SPI1_ReadWriteByte(GS[1]);
SPI1_ReadWriteByte(GS[2]);
SPI1_ReadWriteByte(GS[3]);
SPI1_ReadWriteByte(GS[4]);
SPI1_ReadWriteByte(GS[5]);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET){}
MODE=1; [/mw_shl_code]
之前用的mini板的双向程序是正确的,只不过不去读数据,就时钟线和MOSI两根线。用了单向TX后波形就慢了
|