问题1:目前网上大多数使用STM32 spi接口都将SPI 的 cs信号配置成软件nss管理。根据STM32的编程手册发现,也可以将cs片选信号配置成Hardware NSS management,我们尝试将该片选信号配置成Hardware NSS management方式,但是发现无法将CS信号拉高,该CS信号一直保持低电平。
问题2:将SPI接口的CS配置成软件nss管理,以下代码可以执行过去。
u8 SPI1_ReadWriteByte(u8 TxData)
{
while((SPI1->SR&1<<1)==0);
SPI1->DR=TxData;
while((SPI1->SR&1<<0)==0);
return SPI1->DR;
}
也就是说程序不会死在 while((SPI1->SR&1<<0)==0);这个地方。
但是如果将片选信号配置成 Hardware NSS management,那么程序就会死在 while((SPI1->SR&1<<0)==0);这个地方。
我们理解SPI主设备读取数据线上的值,实际与片选是没有关系的,只要这个时候有SCK信号就可以了,配置成 Hardware NSS management的时候,SCK使能正常发出来的。
问题3:SPI接口可以支持DMA模式,但是如果配置成DMA模式,那么这个时候CS是应该用软件nss管理,还是使用 Hardware NSS management?
操作:配置该CS信号为Hardware NSS management时,我们做了如下操作:
1、使能SPI接口时钟、复用GPIO接口时钟。
2、将相关的GPIO口复用设置为SPI的SCK MOSI MISO CS接口。
3、将SPI CR1寄存器的第9bit ssm设置为0。Software slave management disabled
4、将SPI CR2寄存器的第2bit ssoe设置为1.SS output is enabled in master mode and when the cell is enabled.
5、将STM32的SPI接口设置成主设备。
6、将SPI接口设置成双向数据模式。
7、数据帧格式是8bit。
8、使能SPI 接口。
|