STM32的SPI查询方式传输测试

发布者:RadiantSerenity最新更新时间:2016-06-03 来源: eefocus关键字: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 ;
}

 

输出:

STM32的SPI查询方式传输测试

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

关键字:STM32  SPI  查询方式  传输测试 引用地址:STM32的SPI查询方式传输测试

上一篇:STM32的SPI问题。
下一篇:STM32单片机学习(9) LCD1602显示屏输出实验

推荐阅读最新更新时间:2024-03-16 14:56

stm32之重映射与地址映射
重映射 stm32中对于一些端口的外设已经被其他引脚所使用,这是就需要用端口重映射来解决了,很方便。 以USART1为例 重映射的步骤为: 打开重映射时钟和USART重映射后的I/O口引脚时钟, RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE); I/O口重映射开启. GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE); 配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPI
[单片机]
<font color='red'>stm32</font>之重映射与地址映射
stm32中断服务函数名称表速查
*参考启动文件 startup_stm32f10x_xl.s 中断服务函数名(固定) 匹配对象 WWDG_IRQHandler Window Watchdog PVD_IRQHandler PVD through EXTI Line detect TAMPER_IRQHandler Tamper RTC_IRQHandler RTC FLASH_IRQHandler Flash RCC_IRQHandler RCC EXTI0_IRQHandler EXTI Line 0 EXTI1_IRQHandler EXTI Line 1 EXTI2_IRQHandler EXTI Line 2 EXTI3_IRQHandler EXT
[单片机]
stm32 TIM定时器[操作寄存器+库函数]
stm32配备了2个高级定时器TIM1和TIM8,4个通用定时器 TIM2,TIM3,TIM4和TIM5,还有两个基本定时器TIM6和TIM7。 高级定时器常用于电机控制,因为其加入了死区控制,紧急制动,定时器同步等高级特性。基本定时器可以为数模转化器提供准确的时间基准。 stm32的通用定时器由一个通过可编程预分频器驱动的16位自动装载计数器构成。通用定时器可以用于测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。 通用计时器的使用,需要先配置一个时基单元,就是设定一个基准时间,确定计数一次耗去的时间,可以设定在几个微妙到几个毫秒之间。 通用定时器的都有4个独立通道(TIMx_CH1~4),这
[单片机]
<font color='red'>stm32</font> TIM定时器[操作寄存器+库函数]
Keil5软件配置与新建STM32工程的步骤
新建工程文件夹 建立名字为LED的文件夹存放工程文件,其中再建立两个文件夹,Listing文件夹用于存放编译器编译时候产生的C语言、汇编、链接文件,Output文件夹用于存放编译产生的调试信息、hex文件、预览信息、封装库等。 文件夹建好之后,在LED文件夹下存放startup_stm32f10x_hd.s、stm32f10x.h、main.c文件。前两个文件可以在STM32F1xx的固件库中找到,第三个文件是空文件。 在Keil5中新建工程的步骤 如下图所示,Project-New,新建工程,工程名为Led,点击保存。 点击保存之后,弹出如下窗口,选择芯片型号。根据你开发板使用的芯片具体的型号来选择。如果这里没有出现你
[单片机]
STM32 DMA 知识讲解
DMA,全称为:DirectMemoryAccess,即直接存储器访问,DMA传输将数据从一个地址空间复制到另外一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA传输对于高效能嵌入式系统算法和网络是很重要的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,能使CPU的效率大为提高。DMA是个非常好的功能,它不但能减轻CPU负担,还能提高数据传输速度. STM32最
[单片机]
STM32+移远MC20模块采用MQTT协议登录OneNet上传GPS数据
一、环境介绍 MCU: STM32F103C8T6 GSM模块: 移远MC20 (MT2503D)(GSM+GPS共存)功能很强大 开发软件: Keil5 MQTT协议采用OneNet的旧版协议,登录OneNet控制台创建应用时要选择旧版本。 如果想使用新版本的标准MQTT协议连接OnetNet请参考这里: https://blog.csdn.net/xiaolong1126626497/article/details/107385118 完整源代码下载: https://download.csdn.net/download/xiaolong1126626497/18245206 二、MC20模块
[单片机]
STM32+移远MC20模块采用MQTT协议登录OneNet上传GPS数据
STM32】IIC基本原理(实例:普通IO口模拟IIC时序读取24C02)
IIC的基本介绍 IIC的简介 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。它是半双工通信方式。 IIC总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此IIC总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。 IIC总线的另一个优点是,它支持多主控(multimastering), 其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。
[单片机]
【<font color='red'>STM32</font>】IIC基本原理(实例:普通IO口模拟IIC时序读取24C02)
STM32的JTAG引脚说明
STM32的PA3、PA4、PA13、PA14、PA15,是JTAG用的引脚 若要当作普通IO口使用,则需要配置 在管脚初始化中加入 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); 其中 GPIO_Remap_SWJ_NoJTRET 除JTRST外SWJ完全使能(JTAG+SWJ); GPIO_Remap_SWJ_JTAGDisable JTAG-DP失能+SW-DP使能; GPIO_Remap_SWJ_Disable SWJ完全失能(JTAG+SW-DP); 上电复位后IO端口被配置为浮空输出模式; JTAG引脚被置于输入上拉或下拉
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved