历史上的今天
今天是:2025年04月28日(星期一)
2019年04月28日 | STM32F4 SPI NSS硬件模式配置及使用
2019-04-28 来源:eefocus
我们知道,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通信的示例,请按照实际修改。
史海拾趣
|
现代通信技术的迅速发展使得许多应用领域都采用无线的通信方式进行数据传输。编解码芯片PT2262、PT2272组成的电路,由于具有体积小、功耗低、功能强、成本低等特点,广泛应用于各类的无线遥控器、无线报警器以及玩具等其他小型电器装置。但是,这种 ...… 查看全部问答> |
|
为什么EVC创建建Pocket PC 2003 程序时,默认就变standardsdk了? 然后我选Pocket PC 2003 平台,evc就卡住了 .无法响应 都重装好几次EVC,Pocket PC 2003 SDK了… 查看全部问答> |
|
为什么sysgen hpc 产生两个大小不同的ceshell.lib C:\\WINCE500\\PBWorkspaces\\simu3\\WINCE500\\Emulator_x86\\cesysgen\\sdk\\lib\\x86\\retail\\ceshell.lib (5K) C:\\WINCE500\\PUBLIC\\SHELL\\OAK\\LIB\\X86\\RETAIL\\ceshell.lib (1150K) 我的hpc是从wince老版本 ...… 查看全部问答> |
|
各位好: 我买开发板的时候经常听到有人问这种开发板能不能支持某一种操作系统,比如VxWorks操作系统。 我是菜鸟,我不理解所谓的开发板能不能支持什么操作系统。但我查了有关资料之后就产生如下理解: “一种开发板能不能支持某一种操作系统, ...… 查看全部问答> |
|
一个学了一年VC的人去做车载音响软件开发需要学习什么硬件知识,请大家帮忙! 各位好,请过来人帮忙!我本来是准备走VC应用程序道路的,大四上学期才开始学的VC,找了将近半年多的VC工作没有找到。现在反而找到一个机会去做车载音响软件开发。当时面试官说你学桌面软件的,但我们是做那种单片机 ...… 查看全部问答> |
|
实验室管理工程师 设备管理工程师 电池质量工程师 EMC整改工程师 信号完整性分析工程师 硬件电路设计工程师 软件工程师 硬件工程师 Windows程序开发工程师 电池管理系统控制策略开发工程师 电池管理系统安全工程师 电网配电工程师 充电 ...… 查看全部问答> |
|
How 2 “Getting a Profile Identifier from the ZigBee Alliance” without require from Zigbee Alliance?? is anyone alrady have the ENUM of the identifier?both manufacturer-specific and public is excellent!… 查看全部问答> |
|
智能电网设备应用中必须保证的高要求高标准以2008年中国北京奥运会成功举办为契机,近五年来,中国大力推动智慧城市的发展,其中智能电网系统就是重要组成部分。从2011年开始, ...… 查看全部问答> |




