STM32 SPI的NSS引脚配置

以STM32F103RCT6芯片为例,查芯片手册,可以看到SPI1的NSS引脚对应PA4引脚,那么这个NSS引脚作用是什么?
芯片手册节选
SPI通信需要有MOSI、MISO、SCLK、CS(Chip Select)四个引脚。一般SPI的从机的片选端(CS)为低电平时,从机被选中,此时从机才能正常工作。所有的主机和从机其实都有片选信号,只有片选了,才能工作。而SPI的主机要正常工作,片选端需要为高电平。但是从STM32的数据手册中找不到SPI的CS引脚,其实文章开头提到的NSS引脚起到的就是CS引脚的作用。下面我们对主机的NSS引脚的配置进行分析:

在使用固件库对SPI进行配置时,调用的是SPI_Init函数,在对入口参数SPI_InitStruct的成员的有效性判断函数的定义中,我们可以查找到SPI_Mode成员的有效值为
#define SPI_Mode_Master ((uint16_t)0x0104)
#define SPI_Mode_Slave ((uint16_t)0x0000)
而SPI_NSS成员的有效值为
#define SPI_NSS_Soft ((uint16_t)0x0200)
#define SPI_NSS_Hard ((uint16_t)0x0000)
在调用SPI_Init配置SPI主机时,我们将SPI_Mode设置为SPI_Mode_Master,并将SPI_NSS设置为SPI_NSS_Soft即可。这其中的原理是什么呢?

根据SPI_Mode_Master和SPI_NSS_Soft的宏定义,实际上这两个参数将SPI_CR1寄存器的第2、8、9位设置为了1。位2是主设备选择位,查手册可知要配置为主机,显然要将此位置1。但仅配置这一位是不够的,上面提到NSS引相当于CS引脚的作用,在配置为主设备时,需要将其接高电平。一种方法是硬件上直接接高电平,也就是在芯片的外部把PA4引脚接到高电平。而我们这里的配置则采用了软件上的方法。CR1寄存器的第九位SSM实际上就决定了是通过软件的方法来配置NSS引脚的电平还是通过硬件的方法来配置NSS引脚的电平。我们使用的SPI_NSS_Soft 宏就是将第九位置位,选择使用软件方法将NSS引脚接高电平。

那么软件方法是什么意思?软件方法就是在我们把SSM位置位后,芯片外部的PA4引脚输入的电平就不再影响NSS引脚最终获得的电平,NSS引脚与CR1寄存器的第八位(SSI)自动进行了关联。NSS引脚的电平将由SSI位来决定。当SSI位置1时,就相当于给NSS引脚接了高电平,当SSI位置0时,就相当于给NSS引脚接了低电平,也就是说我们完全可以通过编程操作CR1寄存器的SSI位来实现将NSS引脚接到高电平,而无需在芯片外部进行实际电路的连接。我们调用SPI_Init函数时,SPI_Mode_Master宏将SSI位置1,因此这个宏相当于给NSS接了高电平,将这个SPI设置为了主机。

回答: 在STM32SPI中,硬件NSS是指通过外部引脚控制片选信号的方式。当SPI配置为主机模式时,可以将NSS引脚设置为输出模式,通过SPI_CR2寄存器的SSOE位来控制。当SSOE为1时,NSS引脚会输出低电平,也就是拉低,从而实现片选功能,将其他SPI设备的NSS引脚与它相连,就可以成功进行片选。而当SPI配置为从机模式时,NSS引脚则可以设置为输入模式,通过SPI_CR1寄存器的SSM位和SSI位来控制。SSM位为1是为了使能软件管理,而SSI位为1是为了使NSS内部电平为高电平。在硬件模式下,保持主机模式时,内部输入的NSS电平必须为高,才能保持MSTR和SPE位为1,即保持主设备状态。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [STM32 SPI 软件NSS和硬件NSS解读](https://blog.csdn.net/m0_46272475/article/details/121152512)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [关于STM32SPI硬件的NSS配置](https://blog.csdn.net/Potatotatotato/article/details/123316929)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星水天河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值