8615|10

68

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32的SPIMASTER方式发送数据时NSS引脚能否硬件自动拉低? [复制链接]

   如题,原来预期在用SPI MASTER方式下,SPI_NSS引脚由硬件控制,平时都是高电平,当我要操作SPI口传输的时候,NSS自动拉低,数据传输完成则自动拉高。不过试了很多次,发现NSS不管怎么设置都是低电平,似乎不会自动拉低。
     我的程序部分如下:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
                         RCC_APB2Periph_SPI1, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI1, &SPI_InitStructure);
    SPI_SSOutputCmd(SPI1, ENABLE);//使能SPI1的SPI1_NSS(PA4)输出
  SPI_Cmd(SPI1, ENABLE);
  while(1)
  {
     while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
     SPI_I2S_SendData(SPI1, 0xcc);
   }
   SPI_NSS_Hard也试过了都是如此,NSS引脚不会自动拉低。不知道是不是我哪里还有地方设置的不对呢,还请大家指点指点
   
此帖出自stm32/stm8论坛

最新回复

                                 当初看DATASHEET的时候对这个也很困惑.. 这样的缺陷的使得SPI不太适合用DMA传输... 只好用软件控制CS. 然后用死等的方法.  详情 回复 发表于 2010-6-22 21:44
点赞 关注
 

回复
举报

88

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

只要SPI处于Master,NSS既自动输出低电平

                                 这是SPI规范所规定的。
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

有没有可能当SPI MASTER方式发完后由硬件产生一个脉冲?

                                  
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 

你要求的这种操作方式是I2S的方式,而不是SPI

                                 3楼要求的功能可以通过软件实现。
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

5
 

版主起这么早啊,7点24分就回复了呀,辛苦了啊,感谢:)

    
    这段内容我反复研究过了,主模式、SSOE使能、NSS引脚的设置, 我观测到NSS的电平始终是为低,即使是SPI不传输期间也为低,实验了多次都是如此,在ST英文论坛上也找了相关的帖子,很多人都有反映这样的情况。我在想是不是必须在NSS引脚上加上拉电阻平时把它拉高才行呢,到时候我再试试
此帖出自stm32/stm8论坛
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

6
 

软件可行,只是忙坏了芯片了

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

7
 

刚才用逻辑分析仪做了测试

时序如下
https://bbs.eeworld.com.cn/upfiles/img/20094/2009421145033856.gif

   反复试验,发现SPI_NSS引脚的自动硬件控制与想象的不同,无论是否外加上拉,只要一使能SPI,SPI_Cmd(SPI1, ENABLE); SPI_NSS引脚就一直处于低电平,直到SPI_Cmd(SPI1, DISABLE);这个需要用程序来控制。  而用过其他芯片则是发送完成自动会拉高,这点是要注意的
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 

小弟也研究了一下

果真如alien2006大哥所说的那样,只要使能了SPI,NSS就一直是低电平,虽然你可以通过GPIO_SetBits(GPIOA, GPIO_Pin_4)把NSS在“软件”上拉高,但是,通过万用表测量,NSS还是低电平。
不过,当我们如alien2006大哥那样把SPI的管脚配置好了之后,如果我们再单独的把NSS管脚配置成普通的推挽式输出,则,我们可以任意的控制NSS管脚,就像是普通的IO口那样。
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 问题解决了没有啊?我也是遇到了这个问题,不想用软件实现啊。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

10
 
我也遇到这个问题, 在 LM3SXXX 里 SPI 没有这样的问题, NSS 完全由硬件自动来改变电平, 为什么 STM32 就不可以呢?
由软件来完成, 不合理呀, 要等待发送完成, 或者多个中断服务
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

11
 
当初看DATASHEET的时候对这个也很困惑..

这样的缺陷的使得SPI不太适合用DMA传输... 只好用软件控制CS. 然后用死等的方法.
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表