STM32的SPI查询方式传输测试

发布者:郑哥最新更新时间:2020-10-10 来源: elecfans关键字:STM32  SPI  查询方式  传输测试 手机看文章 扫描二维码
随时随地手机看文章

环境:


主机: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查询方式传输测试

上一篇:更快的STM32H7微控制器,为产品带来更高的性能和经济性
下一篇:STM32定时器溢出模式计时设置

推荐阅读最新更新时间:2024-11-13 00:40

STM32 SPI Flash DFU
这次讲的是将程序、图片或其他文件下载到SPI Flash中。我使用的是W25X16的SPI Flash,他共有2MB空间,2个Block,512ge Sector,8096个Page。由于SPI Flash不能直接跑程序,我们从接口就知道了。 接下去我们就来讲讲怎么编写SPI flash的升级功能。这次的工程是基于之前的Internal Flash修改而来的。修改的部分主要在USB_User组里: 我只将改改的部分。 hw_config.c、usb_istr.c、usb_prop.c、usb_pwr.c这介个文件没有什么还修改的。usb_desc.c文件需要修改下接口字符串描述符,由于我们的SPI Flash空间2M,所以我们将
[单片机]
<font color='red'>STM32</font> <font color='red'>SPI</font> Flash DFU
stm32的DMA空闲中断数据配置
对于串口2的示例: void USART2_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; DMA_InitTypeDef DMA_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); RCC_AHBPeriphClockCmd(
[单片机]
STM32学习探究:流水灯的实现
流水灯的实现 这里我们使用 stm32mini 开发板实现外接流水灯,这里我采用了三个灯(说明问题就可以了)。外接的引脚分别为PA2,PB8,PC13三个引脚,在连接的时候,采用灯的正极接GPIO引脚,负极接GND(这是一种合理的方式)。 注意:虽然接VCC也可以发光,但是这样不是合理的连接方式,而且,发光的情况刚好与接GND的情况相反。 参考的相关资料如下: 时钟使能: 端口配置: 端口输出: 具体实现的代码如下: //led.h文件 #ifndef __LED_H #define __LED_H #include sys.h //LED端口定义 #define LED0 PAout(
[单片机]
<font color='red'>STM32</font>学习探究:流水灯的实现
stm32 直接读写寄存器代码风格总结
简单的总结了一下stm32 寄存器读写代码风格,以备后用: 根据memory mapping 直接写寄存器代码风格: #define GPIOA_BASE1 (uint32_t)0x40010800 #define GPIOA_CRH ((uint32_t*)(GPIOA_BASE1+0x04)) 转换为指针之后,直接读写: *GPIOA_CRH=0x000004B0; //A端口 //复用推挽输出 结构体指针解决连续多个寄存器读写设置: #define Usart1_BASE 0x40013800 typedef struct { __IO uint32_t SR; __IO
[单片机]
<font color='red'>stm32</font> 直接读写寄存器代码风格总结
STM32复位/时钟控制
========================== Reset/Clock Control ======================= 1、时钟安全系统(CSS) 时钟安全系统被激活后,时钟监控器将实时监控外部高速振荡器;如果HSE时钟发生故障,外部振荡器自动被关闭,产生时钟安全中断,该中断被连接到Cortex-M3的NMI的中断;同时CSS将内部RC振荡器切换为STM32的系统时钟源(对于STM32F103,时钟失效事件还将被送到高级定时器TIM1的刹车输入端,用以实现电机保护控制)。 操作流程: 1)、启动时钟安全系统CSS: RCC_ClockSecuritySystemCmd(ENABLE); (
[单片机]
STM32——I2C
一、I2C协议 I 2 C (Inter-Integrated Circuit)协议是由 Philips 公司开发的,由于它具备引脚少、硬件实现简单、可扩展性强、不需要如 USART、CAN 的外部收发设备等特点,现在被广泛地使用在系统内多个集成电路(IC)间的通信。 1、物理层 (1)它只使用两条总线线路 :一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。 (2)每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。 (3)多主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。 (4)具有三种传输模式 :标准模式的传 输速率为 100 Kbit/s ,快速
[单片机]
<font color='red'>STM32</font>——I2C
stm32TIM输出通道配置详解
1、使能TIM时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM*,ENABLE); 2、基础设置 TIM_TimeBaseStructure.TIM_Period 计数值 TIM_TimeBaseStructure.TIM_Prescaler 预分频,此值+1为分频的除数 TIM_TimeBaseStructure.TIM_ClockDivision = 0 时钟因子 待做进一步说明 TIM_TimeBaseStructure.TIM_Repetitio
[单片机]
STM32中断优先级void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct) { u32 tmppriority = 0x00, tmpreg = 0x00, tmpmask = 0x00; u32 tmppre = 0, tmpsub = 0x0F; /* Check the parameters */ assert(IS_FUNCTIONAL_STATE(NVIC_InitStruct- NVIC_IRQChannelCmd)); assert(IS_NVIC_IRQ_CHANNEL(NVIC_InitStruct- NVIC_IRQChannel)); assert(IS_NVIC_PREE
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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