我们知道,SPI_NSS有两种模式,SPI_NSS_Hard和SPI_NSS_Soft。
SPI_NSS_Hard,硬件自动拉高拉低片选,在速率上是远比软件方式控制要高的,缺点是当STM32为主设备时,同一个SPI上面只能接一个从设备。这也就限制了SPI通信设备的数量。
SPI_NSS_Soft,软件控制,GPIO控制片选拉高拉低,优点是一个SPI上面可以挂多个设备。这也是使用较多的方式。所以不再讲述这个,主要讲一下SPI_NSS_Hard下,该如何配置及使用SPI。
话不多说,直接上代码。

void SPI2_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;SPI_InitTypeDef  SPI_InitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);GPIO_InitStructure.GPIO_Pin = SPI2_NSS_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(SPI2_NSS_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = SPI2_SCK_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(SPI2_SCK_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = SPI2_MOSI_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(SPI2_MOSI_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = SPI2_MISO_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;GPIO_Init(SPI2_MISO_PORT, &GPIO_InitStructure);GPIO_PinAFConfig(SPI2_NSS_PORT,SPI2_NSS_PIN_SOURCE,GPIO_AF_SPI2);GPIO_PinAFConfig(SPI2_SCK_PORT,SPI2_SCK_PIN_SOURCE,GPIO_AF_SPI2);GPIO_PinAFConfig(SPI2_MISO_PORT,SPI2_MISO_PIN_SOURCE,GPIO_AF_SPI2);GPIO_PinAFConfig(SPI2_MOSI_PORT,SPI2_MOSI_PIN_SOURCE,GPIO_AF_SPI2);SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;SPI_InitStructure.SPI_Mode = SPI_Mode_Master;        SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;     SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;   SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;      SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;SPI_InitStructure.SPI_CRCPolynomial = 7;SPI_Init(SPI2, &SPI_InitStructure);SPI_SSOutputCmd(SPI2,ENABLE);SPI_CalculateCRC(SPI2,DISABLE);SPI_ClearFlag(SPI2,SPI_FLAG_TXE);SPI_ClearFlag(SPI2,SPI_FLAG_RXNE);
}

STM32是可以自动拉高拉底的,但是是通过SPI_Cmd这个函数实现的,使能SPI,硬件自动拉低片选,取消使能SPI,硬件自动拉高片选。

delay_us(28);
SPI_Cmd(SPI2,ENABLE);
while(SPI_GetFlagStatus(SPI2,SPI_FLAG_TXE) == RESET);
SPI_SendData(SPI2,data);
while(SPI_GetFlagStatus(SPI2,SPI_FLAG_RXNE) == RESET);
SPI_ReceiveData(SPI2);
SPI_Cmd(SPI2,DISABLE);

这是我使用的时候,一段简单的SPI通信的示例,请按照实际修改。

STM32F4 SPI NSS硬件模式配置及使用相关推荐

  1. stm32 spi nss硬件模式配置参考程序

    By: Ailson Jack Date: 2020.11.27 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/ ...

  2. SPI的NSS硬件模式

    在配置NSS脚时,我们常用软件控制模式,通过普通的IO口输出高低电平控制/CS片选脚,然而在接触NSS硬件流控制时却一窍不通,虽然他不常用,但是今天粗略的了解了一下,分享出来有不对的地方请大家指正.

  3. STM32 SPI NSS 引脚为不能拉高问题

    使用过 STM32 的SPI 的朋友可能都会发现一个问题,那就是其NSS引脚 在硬件模式下无法自动拉高,可能也因为这个原因致使  .大部分朋友在使用SPI时候都是优先选用软件 控制NSS引脚的工作模式 ...

  4. 华大 MCU 之五 SPI 从机 DMA 模式 配置(不能正常接收问题处理)

      最近有个需求是需要使用 华大 MCU(HC32F460) 的 SPI 作为从机来接收数据,无奈搞了两天死活不可用.配置完 SPI 的从机模式后,只要启动主机端的发送就出现如下图所示的错误: 下面是 ...

  5. #STM32标准固件库的硬件SPI(NSS为软件)封装函数库

    #基于STM32标准固件库的硬件SPI(NSS为软件)封装函数库: 最近来回顾之前写过的SPI_Flash,打算重写一次SPI配置文件 spi协议最大的特点大概就是全双工了,因此stm32硬件spi的 ...

  6. 3.3 SPI串行Flash配置模式

     SPI串行Flash配置模式 1.SPI串行配置介绍 串行Flash的特点是占用管脚比较少,作为系统的数据存贮非常合适,一般都是采用串行外设接口(SPI 总线接口).Flash 存贮器与EEPROM ...

  7. STM32F4 SPI DMA

    文章目录 STM32F4 SPI DMA 自己整理(存储器到外设模式) SPI结构体 SPI引脚编号 SPI配置 DMA结构体 DMA请求映射 DMA传输模式 SPI 发送DMA配置 DMA发送中断服 ...

  8. STM32 SPI NSS 作用

    STM32 SPI NSS 作用 原创 2017年06月16日 11:18:14 142 SSM可以控制内部NSS引脚与SSI(一个寄存器,软件模式)相连,还是与NSS外部引脚(真正的STM32引脚, ...

  9. STM32 SPI NSS大揭秘

    SSM可以控制内部NSS引脚与SSI(一个寄存器,软件模式)相连,还是与NSS外部引脚(真正的STM32引脚,硬件模式)相连.真正作用的是内部NSS引脚(内部NSS引脚才真正连接到SPI通信控制器上) ...

最新文章

  1. 设计模式: 自己手动实现一个观察者设计模式
  2. pycharm 调试错误 Connection to Python debugger failed: Socket operation on nonsocket: configureBlocking
  3. 使用AspNetpagerGridView添加连续的序号
  4. Spring框架分为哪七大模块以及各模块的主要功能作用
  5. weblogic 故障转移
  6. 粉丝提问:求问大神您会查exif吗?
  7. re.DOTALL --编写多行模式的正则表达式
  8. Flink:Container is running beyond virtual memory limits
  9. 【java笔记】继承与多态
  10. 190503每日一句
  11. CSS预处理器和后处理器
  12. 数据库系统概论第五版课后习题答案王珊
  13. 木马的检测、清除与防范
  14. 普渡大学计算机科学本科,美国普渡大学计算机科学CS本科申请条件及案例
  15. Maven – 父子 POM 示例
  16. Rapid Tampere加速联合产业创新
  17. Caffe中的solver文件参数
  18. pytorch对矩阵(奇异和非奇异)求逆
  19. 分页查询时报错:The bean ‘localeResolver‘, defined in class path resource [com/botany/spore/core/config/Comm
  20. jzoj5498 【清华集训2017模拟12.10】大佬的难题 巧妙容斥

热门文章

  1. 增长:IT运维发展趋势报告
  2. 2022年数维杯国际赛C题 如何利用大脑结构诊断阿尔茨海默氏病
  3. [体检]悲从中来,伤不起
  4. WIN10系统休眠文件与保留存储
  5. 南昌工学院计算机挂科率,南昌工学院一年预科心声
  6. 分享溜客2011年5月16日被检测过程
  7. B. Sheldon and Ice Pieces
  8. 关于win10 共享打印机遇到的问题(自己留用)
  9. autoware lidar_localizer包下的ndt_matching节点的学习
  10. 谷歌大数据的三驾马车