`
ydbc
  • 浏览: 737842 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

STM32的SPI查询方式传输测试

 
阅读更多

STM32的SPI查询方式传输测试

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.


环境:

主机:WIN7

开发环境:MDK4.23

MCU:STM32F103CBT6

说明:

软件设置NSS脚,利用查询方式传输

源代码:

初始化代码:

//关闭SPI
SPI_Cmd(SPI1,DISABLE);
//初始化SPI接口的SSN脚以及NTRX的RST脚
NtrxCtrlInit();
//初始化SPI时钟	
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA,ENABLE);
//配置SPI1引脚:SCK, MISO and MOSI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ;
GPIO_Init( GPIOA, &GPIO_InitStructure );
// SPI1配置
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_1Edge ;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft ;
//SPI波特率分频设置:4M
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8 ;
//SPI设置成LSB模式
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB ;
SPI_InitStructure.SPI_CRCPolynomial = 7 ;
SPI_Init( SPI1, &SPI_InitStructure ) ;
//启动SPI
SPI_Cmd(SPI1,ENABLE);

发送代码:

//SPI发送一个字节
static uint8 SPI_SendByte(uint8 Data)
{
	// Loop while DR register in not emplty
	while( SPI_I2S_GetFlagStatus( SPI1, SPI_I2S_FLAG_TXE ) == RESET ) ;

	// Send byte through the SPI1 peripheral
	SPI_I2S_SendData( SPI1, Data ) ;

	// Wait to receive a byte
	while( SPI_I2S_GetFlagStatus( SPI1, SPI_I2S_FLAG_RXNE ) == RESET ) ;

	// Return the byte read from the SPI bus
	return SPI_I2S_ReceiveData( SPI1 ) ;
}


接收代码:

//SPI读取一个字节
void SPI_ReadBytes( uint8 Addr, NtrxBufferPtr Buffer, uint8 Len )
{
	if( ( Len > 0x80 ) || ( Len == 0 ) )
		Len = 1 ;
	SPI_SendByte( Len ) ;
	SPI_SendByte( Addr ) ;
	while( Len-- )
    {
    	*Buffer = SPI_SendByte( 0xFF ) ;
		Buffer ++ ;
	}
}


NSS脚电平设置:

//SSN脚拉低,开始发送数据
void NtrxSSN_Lo( void )
{
	GPIO_ResetBits( NTRX_SSN_PORT, NTRX_SSN_PIN ) ;
}

//SSN脚置高,结束发送数据
void NtrxSSN_Hi( void )
{
	GPIO_SetBits( NTRX_SSN_PORT, NTRX_SSN_PIN ) ;
}


示例代码:

uint8 NtrxReadSingleSPI( uint8 Addr )
{
	NtrxBufferType r ;
	NtrxSSN_Lo() ;
	SPI_ReadBytes( Addr, &r, 1 ) ;
	NtrxSSN_Hi() ;
	return r ;
}

输出:

黄线为NSS脚电平,蓝线为CLK电平.

分享到:
评论

相关推荐

    stm32 spi双机通信

    STM32 SPI(Serial Peripheral Interface)双机通信是一种在微控制器之间进行高速数据传输的通信协议。SPI是一种同步串行接口,通常用于连接低速外设,如传感器、A/D转换器、LCD显示器等。STM32是意法半导体公司推出...

    STM32 SPI 测试程序

    STM32 SPI(Serial Peripheral Interface)测试程序是用于验证和调试STM32微控制器上SPI接口功能的一个实用工具。SPI是一种同步串行通信协议,广泛应用于各种嵌入式系统,如传感器、显示设备、存储器等。在STM32系列...

    SPI.rar_STM32 SPI_STM32-SPI_spi 程序_stm32 spi

    SPI接口在STM32中由SPI(Serial Peripheral Interface)外设实现,它提供全双工、同步通信,允许数据同时在主设备和从设备之间传输。STM32支持最多5个独立的SPI接口,每个接口都可以独立配置,具有很高的灵活性。 2...

    STM32F103硬件SPI与ADS8341通信

    32个时钟周期是指在一次SPI传输中,主设备(STM32)发出32个时钟脉冲来完成数据的读写操作。这个周期数可能由ADS8341的转换速率和所需的数据传输速率共同决定。在STM32的SPI配置中,可以通过编程设置时钟分频因子来...

    STM32 SPI双机中断通信

    - **数据位宽**:STM32支持8位数据传输,可通过`SPI_DataSizeConfig()`函数设置。 - **时钟极性和相位**:SPI的CPOL和CPHA参数控制时钟信号的高低电平和采样时刻,需根据外设协议设定。 - **波特率配置**:通过`...

    STM32 SPI读写SCA103T传感器

    STM32 SPI 读写 SCA103T 传感器是一项关键的嵌入式系统开发技能,涉及到微控制器(MCU)与传感器之间的通信。STM32 是一款基于 ARM Cortex-M 内核的微控制器系列,广泛应用于各种物联网和嵌入式应用中。SCA103T ...

    SPI.rar_STM32-SPI_pn512 stm32 spi_spi 程序_stm32 spi

    3. 设置中断:当SPI传输完成或出现错误时,中断处理程序可以及时响应。 4. 发送和接收数据:通过SPI发送命令到PN512,并等待返回的数据。这可能涉及到对SPI寄存器的操作,如SPI_I2S_DataReg寄存器。 5. 错误检查和...

    STM32之间的SPI通信

    STM32之间的SPI通信是一种常见的微控制器间的数据交换方式,尤其在嵌入式系统中广泛应用。SPI(Serial Peripheral Interface)是一种同步串行通信协议,它允许一个主设备(Master)和一个或多个从设备(Slave)之间...

    SPI实验测试test_stm32spi_

    STM32 SPI(Serial Peripheral Interface)实验测试是一个关键的嵌入式系统开发环节,它涉及到微控制器如何通过SPI通信协议与外围设备交换数据。在这个"test_stm32spi_"项目中,我们主要关注的是STM32微控制器如何...

    SPI自发自收实验.zip_pilotoy9_spi 自发自收_spi自发自收_stm32f407 spi 自发自收

    STM32F407是一款高性能、低功耗的32位微控制器,它集成了丰富的外设接口,包括SPI。在STM32F407中实现SPI自发自收功能,意味着微控制器既可以作为主设备发送数据,也可以作为从设备接收数据,这种功能在需要双向通信...

    STM32 模拟SPI 一主多从

    STM32 模拟SPI(Serial Peripheral Interface)一主多从是一种常见的嵌入式系统通信方式,用于在多个设备之间传输数据。STM32微控制器系列由意法半导体(STMicroelectronics)生产,广泛应用于各种电子项目,因其...

    sd.zip_STM32 SD SPI _sd spi stm32_spi驱动SD_stm32 spi sd_stm32 spi

    在STM32与SD卡的交互中,SPI模式通常被选为硬件SPI方式,即利用STM32内部集成的SPI外设来实现。 1. **STM32 SPI配置**: - 选择适当的SPI时钟源,如APB1或APB2总线。 - 配置SPI工作模式:主模式(Master)。 - ...

    stm32 spi 例程,亲测通过

    STM32提供了多种方式发送和接收SPI数据,如SPI_Transmit、SPI_Receive、SPI_SendReceive等函数。在传输过程中,主机可以同时读取从机返回的数据,实现全双工通信。 4. **SPI中断处理**: 为了提高实时性,可以...

    STM32 SPI相关源代码

    2. **SPI传输过程**:SPI通信通常由主设备(在这里是STM32)控制时钟,通过MOSI线发送数据,并通过MISO线接收数据。主设备首先选中一个从设备(通过低电平激活CS),然后进行数据交换。数据传输的顺序可能根据CPHA和...

    FLASH-SPI-.rar_cc1310 spi flash_stm32 spi_stm32 spi flash

    在"实验33:FLASH-SPI - 副本"这个文件中,可能包含了详细的步骤、代码示例、电路图或者测试结果,帮助学习者理解如何在STM32上实现SPI接口与W25X14的通信。通常,这样的实验会涵盖以下内容: 1. SPI接口的初始化:...

    STM32F429 网口转SPI通信代码

    STM32F429是意法半导体(STMicroelectronics)推出的一款高性能、低功耗的32位微控制器,属于STM32F4系列。该芯片内置了丰富的外设接口,包括SPI(Serial Peripheral Interface)和以太网接口,这使得它在嵌入式系统...

    STM32F103 LCD 测试源码 ILI9431 SPI LCD

    本项目中的源码是为STM32F103微控制器配置LCD显示的测试代码,使用的LCD驱动芯片是ILI9431,而通信方式则是SPI接口。 ILI9431是一款TFT LCD控制器/驱动器,能够支持多种分辨率,常用于小型彩色显示屏。它提供了丰富...

    ADXL345 STM32 SPI 代码亲测可用

    6. 错误处理:在代码中加入错误检查机制,例如,检查SPI传输是否成功,数据是否在预期范围内,以确保系统稳定运行。 提供的压缩包文件"ADXL345"可能包含了一个示例代码,你可以直接使用或者作为参考来编写自己的...

    STM32F407+w5500.zip_STM32F407 SPI_stm32F407+w5500_stm32f4 id_stm

    在本项目中,STM32F407与W5500芯片协同工作,实现串行通信到以太网数据传输的功能。W5500是一款集成有硬质网络协议栈的以太网控制器,它支持TCP/IP协议栈,可以方便地将串行数据转换为网络数据包。 在标题和描述中...

    STM32F4 SPI1配置读写

    3. **初始化SPI**:在`stm32f4xx_hal_spi.h`中,创建一个`SPI_InitTypeDef`结构体,设置SPI的工作模式、时钟分频因子、CPOL和CPHA等参数,然后调用`HAL_SPI_Init()`初始化SPI1。 4. **配置 NSS 引脚**:如果使用...

Global site tag (gtag.js) - Google Analytics