任务需求:在一个CS周期内需要32个SPI 的sclk,但是根据spi的配置程序,最多实现16个SCLK。 请问如何实现在一个CS周期内产生32个sclk???
程序代码:
//SPI初始化
SPI_InitStructure.SPI_Direc
tion = SPI_Direction_2Lines_RxOnly; //双线只接受
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主模式
SPI3->CR1|=1<<10; //只接受
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //设置SPI的数据大小
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(AD_SPI, &SPI_InitStructure);
主程序:
while (1)
{
GPIO_ResetBits(AD_CS_GPIO_PORT,AD_CS_PIN); //CS=0
Delay(5);
SPI_Cmd(AD_SPI, ENABLE); //SPI使能
data= SPIx_ReadWriteByte(); // 返回SPI_DR数据
SPI_Cmd(AD_SPI, DISABLE); //SPI失能
Delay(120); //增加延时
GPIO_SetBits(AD_CS_GPIO_PORT,AD_CS_PIN); //CS=1
Delay(5);
}
波形图:
只是配置成只发送的话,接收数据线上的数据被忽略;要接收的话,也得发送个数,只是这个数并不关心罢了。
一周热门 更多>