历史上的今天
返回首页

历史上的今天

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

正在发生

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

2020-10-10 来源:elecfans

环境:


主机: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电平.

推荐阅读

史海拾趣

E Connector Solutions公司的发展小趣事

E Connector Solutions公司自成立以来,一直注重技术创新。在早期阶段,公司研发团队通过深入的市场调研,发现电子连接器市场存在着对高速、高密度连接器日益增长的需求。公司投入大量研发资源,成功开发出一款新型连接器产品,其传输速度更快、密度更高,满足了市场的需求。随着产品的推出,E Connector Solutions公司逐渐在市场中树立了技术领先的形象,赢得了客户的信赖。

EBK Kruger GmbH & Co KG公司的发展小趣事

随着公司技术的不断成熟和产品的多样化,EBK Kruger开始将目光投向国际市场。公司参加了多个国际电子展会,并成功与多家国际知名企业建立了合作关系。通过与这些企业的合作,EBK Kruger不仅扩大了市场份额,还学到了先进的国际管理经验和技术知识,为公司的发展注入了新的活力。

Bharat Electronics Ltd公司的发展小趣事

随着市场的不断变化和竞争的加剧,BEL并未满足于现状,而是积极寻求多元化发展。公司不仅拓展了原有的军事电子领域,还涉足电信、运算、公共运输和广播等多个行业。同时,BEL还积极拓展全球市场,将产品出口到多个国家和地区,实现了从区域性企业向全球性企业的跨越。

Diodes Incorporated公司的发展小趣事

值得一提的是,Diodes Incorporated还荣获了亚洲金选奖殊荣。公司的超高功率密度(UHPD)充电器解决方案在亚洲金选奖中获得了金选节能系统功率半导体供货商项目公司奖。这一奖项的获得,不仅彰显了公司在节能系统功率半导体产品领域的领先地位,也进一步提升了公司的品牌形象和市场竞争力。

以上五个故事概述了Diodes Incorporated公司在电子行业中发展起来的相关事实。通过这些故事,我们可以看到公司在技术创新、市场拓展、财务表现以及品牌建设等方面所取得的成就和进步。

Falco Electronics公司的发展小趣事

Falco Electronics非常重视企业文化建设。公司倡导“以人为本”的管理理念,注重员工的成长和发展。公司为员工提供了良好的工作环境和福利待遇,还定期开展各种培训活动,帮助员工提升技能水平。这种良好的企业文化吸引了大量优秀人才的加入,也为公司的持续发展提供了有力保障。

Hisetec Electronic Co Ltd公司的发展小趣事

背景:进入数字化时代,企业面临着前所未有的挑战和机遇。Hisetec Electronic Co Ltd公司深知数字化转型的重要性,开始积极探索数字化转型之路。

发展:公司引入了先进的智能制造系统和大数据分析技术,实现了生产过程的智能化和精细化管理。同时,公司还建立了数字化营销平台,通过精准营销和个性化服务提升客户满意度。数字化转型的成功实施,使Hisetec公司在激烈的市场竞争中保持了领先地位。

问答坊 | AI 解惑

寻求小天线的区分范围

  各位高手,有谁能告诉我,具体的小天线是指哪些天线,它的范围包括哪些?谢谢大家的帮助!!…

查看全部问答>

哪位高人能帮我设计一个射基跟随器呀?

我需要一个放大电路,它的要求是把我现有的一个0.6V的开关,放大成3.0V的开关,最后是要控制发光二极管亮灭,可以提供12.0V电源,哪位高人可以帮忙设计或有成品电路可以用请提供一下信息啊?…

查看全部问答>

关于linux设备驱动的书

我是一个嵌入式linux开发的新手,现在想自学驱动开发,但是我一直有个疑问,请您指教: 我到底先读《linux设备驱动程序(第三版)》和宋老师编著的《linux设备驱动开发详解》哪一本书?我很苦恼。。。…

查看全部问答>

WM手机如何与单片机加USB_HOST芯片通信

如题 只考虑手机端。 随便问问,没希望得到答案 呵呵…

查看全部问答>

我给大家特别推荐的一款产品,非常棒!!!

c8051f 单片机(c2 ,jtag)和at89s5x单片机(isp)二合一串口编程下载线,支持3伏(c8051f 单片机),5伏(at89s5x单片机)电源, 目前通过实际验证可编程下载的芯片:c8051f310、c8051f320、c8051f330D、c8051f340、c8051f350、c8051f360、c8051f4 ...…

查看全部问答>

EVC表盘类?

现在evc上作界面开发,用到模拟压力表盘显示压力值,表针可以实时转动,刻度可以自己设置,不知谁用过,能否帮帮忙?…

查看全部问答>

关于STM32L151的几个问题

1. 何处可以得到 STM32L151 的片子; 2. STM32L151 的内部时钟可以支持 USB吗? 3. IAR5.3 +jilink 7 可以支持STM32L151? 谢谢!…

查看全部问答>

请教:我设置了开机密码但是无法弹出软键盘

我设置了开机密码但是无法弹出软键盘,这样没办法进入系统也没办法关机,请教如何关闭密码或者调出软键盘 是windows CE6.0的 谢谢各位大大了! [ 本帖最后由 qty0 于 2011-7-28 20:21 编辑 ]…

查看全部问答>

一个简单的DA应用程序

一个简单的DAC程序,输出正弦波。…

查看全部问答>