历史上的今天

今天是:2024年10月10日(星期四)

正在发生

2020年10月10日 | STM32的SPI查询方式传输测试

发布者:郑哥 来源: 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定时器溢出模式计时设置

推荐阅读

什么时钟?首先我们先讲讲什么是时钟。时钟就是单片机的心脏。每跳动一下。整个单片机的各个电路就同步的动作一下。就好像我们做广播体操的时候 广播上喊的节拍1234 2234 3234。。。。然后我们全部的同学就按照这个节奏进行一个个动作。节拍越快我们动作越快。节拍越慢我们动作的越慢。内部时钟和外部时钟?PIC单片机有许多型号可以设置成 用外部时钟(如...
摘要:在电源行业,示波器是通用的测试仪器,但许多特色需求,比如电源测试要求通道隔离,有时通道数量需要8个以上,以及CAN通讯等,这些需求示波器都无法满足。但是对示波记录仪来讲,这些需求都不是问题。 一、隔离测试 隔离测试是电源产品非常重要的诉求,一般示波器均是不隔离,若示波器地与非隔离电源的地直接相连,可能会造成电源烧毁,示波器炸机的...
诺基亚日前宣布,它已经与坦佩雷大学联手建立一个“卓越中心”,以加强其ReefShark芯片组SoC定制处理器的开发。这项合作还将增强诺基亚的芯片设计能力和自主SoC的开发,卓越中心预计将于今年11月开业。建立伙伴关系的目的是加速专有SoC芯片组的开发,包括它们的设计和制造,以改善上市时间,并建立长期SOC发展能力和技术领先的基础。这家合资企业还将与生...
日前,美国白宫在第三次半导体高峰会上要求与会业者披露在美供应链信息,具体包括:芯片库存、技术节点以及销售记录等商业机密。这一消息引发业界广泛关注。中国台湾地区相关部门今日表态称,台积电绝不会提供美国客户的机密信息。据台媒经济日报报道,中国台湾地区相关部门负责人吴政忠表示,“目前掌握的信息是‘台积电绝不会提供美方客户的机密信息’。...

史海拾趣

问答坊 | AI 解惑

美国电网

请问美国家用电网的电压大小是多少,频率是多少?…

查看全部问答∨

2009年电子设计大赛赛前热门元器件pdf上传

本帖最后由 paulhyde 于 2014-9-15 09:42 编辑 https://bbs.eeworld.com.cn/viewthread.php?tid=83424&extra=&frombbs=1 [ 本帖最后由 shuining 于 2009-8-24 09:01 编辑 ]  …

查看全部问答∨

三相无刷无传感器直流电机检测仪

三相无刷无传感器直流电机检测仪是飞盈佳乐最新一代的专门针对三相无刷无霍尔传感器直流电机的检测仪器。该产品驱动能力强,功率大,测试速度快,测量范围大,具自动断电保护,可以在线及时显示电机运行时各项参数,是无传感无刷电机的性能测试的好产 ...…

查看全部问答∨

采用S3C2410开发板,实现基于linux的数据采集软件!!

S3C2410中,利用GPIO口获取FPGA传来的数据进行数据处理,利用QT库完成软件的界面设计。。小妹我刚接触嵌入式的开发。。请求各位高人指点下。软件的模块之类的!!不胜感激。。…

查看全部问答∨

C#短信收发中间件的开发(设计)

基于GSM的短信收发中间件,用.NET平台设计,各位老大有实践经验的说下在.NET平台下的设计步骤(就是关键点在哪个地方)…

查看全部问答∨

如何解决TFTLCD与外扩Flash的矛盾

STM32高密度型器件是可以与TFT LCD相连的,其中占用了FSMC一些控制线(如NEx,NOE等),现在要做的项目是一个触屏手持设备,需要做界面,含有图片较多(以数组形式存放的话,一幅256色图片,320*240的话,一个点一字节,那一幅图需70K左右空间 ...…

查看全部问答∨

LightSpeedVCT64排CT床升降故障维修

陕西九翔电子科技有限公司         工程师:于钦清 机型:     LightSpeed VCT 故障现象: 床不能正常上升 本机故障表现为床下降过程一切正常,在按升床键上升过程中中间不能停顿,一旦停顿 ...…

查看全部问答∨

【让人受不了的BUG】解决Chronos手表无法读取时间(Copy System Time)的问题

刚拿到Chronos手表,发现这个BUG。看到论坛里好多人遇到这个问题,现学了一下TCL 找到了原因 原理如下: Chronos Control Center(CCC) 使用了TCL脚本语言做的界面,读取系统时间的函数是clock format [clock seconds] -format \"%m\"复制代码这 ...…

查看全部问答∨

一种锂电池充电三,四节串联保护的系统设计

本帖最后由 qwqwqw2088 于 2013-12-28 11:27 编辑 这里介绍可的是锂电池充电三/四节串联保护系统设计的具体做法! 该保护系统采用精工电子三/四节串联锂离子可充电电池专用充、放电保护ICS-8254构建一级保护。S-8254系列内置高精度电压检测电路 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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