STM32F4 SPI NSS硬件模式配置及使用
我们知道,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硬件模式配置及使用相关推荐
- stm32 spi nss硬件模式配置参考程序
By: Ailson Jack Date: 2020.11.27 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/ ...
- SPI的NSS硬件模式
在配置NSS脚时,我们常用软件控制模式,通过普通的IO口输出高低电平控制/CS片选脚,然而在接触NSS硬件流控制时却一窍不通,虽然他不常用,但是今天粗略的了解了一下,分享出来有不对的地方请大家指正.
- STM32 SPI NSS 引脚为不能拉高问题
使用过 STM32 的SPI 的朋友可能都会发现一个问题,那就是其NSS引脚 在硬件模式下无法自动拉高,可能也因为这个原因致使 .大部分朋友在使用SPI时候都是优先选用软件 控制NSS引脚的工作模式 ...
- 华大 MCU 之五 SPI 从机 DMA 模式 配置(不能正常接收问题处理)
最近有个需求是需要使用 华大 MCU(HC32F460) 的 SPI 作为从机来接收数据,无奈搞了两天死活不可用.配置完 SPI 的从机模式后,只要启动主机端的发送就出现如下图所示的错误: 下面是 ...
- #STM32标准固件库的硬件SPI(NSS为软件)封装函数库
#基于STM32标准固件库的硬件SPI(NSS为软件)封装函数库: 最近来回顾之前写过的SPI_Flash,打算重写一次SPI配置文件 spi协议最大的特点大概就是全双工了,因此stm32硬件spi的 ...
- 3.3 SPI串行Flash配置模式
SPI串行Flash配置模式 1.SPI串行配置介绍 串行Flash的特点是占用管脚比较少,作为系统的数据存贮非常合适,一般都是采用串行外设接口(SPI 总线接口).Flash 存贮器与EEPROM ...
- STM32F4 SPI DMA
文章目录 STM32F4 SPI DMA 自己整理(存储器到外设模式) SPI结构体 SPI引脚编号 SPI配置 DMA结构体 DMA请求映射 DMA传输模式 SPI 发送DMA配置 DMA发送中断服 ...
- STM32 SPI NSS 作用
STM32 SPI NSS 作用 原创 2017年06月16日 11:18:14 142 SSM可以控制内部NSS引脚与SSI(一个寄存器,软件模式)相连,还是与NSS外部引脚(真正的STM32引脚, ...
- STM32 SPI NSS大揭秘
SSM可以控制内部NSS引脚与SSI(一个寄存器,软件模式)相连,还是与NSS外部引脚(真正的STM32引脚,硬件模式)相连.真正作用的是内部NSS引脚(内部NSS引脚才真正连接到SPI通信控制器上) ...
最新文章
- 设计模式: 自己手动实现一个观察者设计模式
- pycharm 调试错误 Connection to Python debugger failed: Socket operation on nonsocket: configureBlocking
- 使用AspNetpagerGridView添加连续的序号
- Spring框架分为哪七大模块以及各模块的主要功能作用
- weblogic 故障转移
- 粉丝提问:求问大神您会查exif吗?
- re.DOTALL --编写多行模式的正则表达式
- Flink:Container is running beyond virtual memory limits
- 【java笔记】继承与多态
- 190503每日一句
- CSS预处理器和后处理器
- 数据库系统概论第五版课后习题答案王珊
- 木马的检测、清除与防范
- 普渡大学计算机科学本科,美国普渡大学计算机科学CS本科申请条件及案例
- Maven – 父子 POM 示例
- Rapid Tampere加速联合产业创新
- Caffe中的solver文件参数
- pytorch对矩阵(奇异和非奇异)求逆
- 分页查询时报错:The bean ‘localeResolver‘, defined in class path resource [com/botany/spore/core/config/Comm
- jzoj5498 【清华集训2017模拟12.10】大佬的难题 巧妙容斥