CH32V307在使用SPI时,从机片选管脚在是使用时分为由软件控制和由硬件控制,用户手册上的描述如下
软件控制比较好理解,也是用的比较多的方式,就是可以将NSS管脚由任意管脚去实现,AF映射的NSS被释放。
但硬件控制好像就要复杂点,我针对的使用场景是SPI主机,NSS由AF映射的NSS管脚实现。从用户手册上的描述来看,我的理解是发送数据时,NSS管脚自动拉低(不需要软件控制管脚),传输结束时自动拉高(不需要软件控制管脚)。为了验证我的猜测,我做了如下测试。
首先使用由软件控制NSS测试SPI工作是正常的,在修改配置为由硬件控制,配置如下
这里需要注意一下,在使用有硬件控制是,需要使用函数使能NSS输出(SPI_SSOutputCmd(SPI1, ENABLE);),并且要放在SPI_Init(SPI1, &SPI_InitStructure)前面,否则会初始化错误。
我首先在发送数据前使能SPI,发送完后不关闭SPI
得到的波形如下
发现NSS拉低后在发送结束后并没有自动拉高
然后我修改代码如下,在传输结束后,禁用SPI
得到的波形如下
在传输结束后,关闭SPI时NSS自动拉高了。
从上述现象可以知道,由硬件控制的NSS可以在发送时自动拉低NSS管教,但不能自动拉高NSS,想要NSS拉高,需要由禁用SPI来实现,并没有实现完全的硬件控制,使用中的效果和由软件控制效率上是一样的。
希望本贴对想用SPI硬件控制NSS的朋友有所帮助。
|