历史上的今天
返回首页

历史上的今天

今天是:2024年09月16日(星期一)

2019年09月16日 | 两块STM32之间的SPI通信

2019-09-16 来源:eefocus

本文以STM32F103为例展示两块STM32之间的SPI通信。废话少说,直接奉上我写的SPI库吧。


首先是 SPI.h


#ifndef _SPI_H_

#define  _SPI_H_


#include "stm32f10x.h"



void RCC_Configuration(void);

void GPIO_Configuration(void);

void SPI_Configuration(void);

void SPI_SendData(u8 byte);

//void SPI_SendString(char* str);

u8 SPI_ReceiveData(void);



#endif


然后是SPI.c




#include "SPI.h"


//时钟配置

void RCC_Configuration(void)

{

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_SPI1,ENABLE);

}


//引脚配置

void GPIO_Configuration(void)

{

    //定义GPIO结构体

   GPIO_InitTypeDef GPIO_InitStructure;

   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

   GPIO_Init(GPIOA,&GPIO_InitStructure);



   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;

   GPIO_Init(GPIOB,&GPIO_InitStructure);

}


//SPI寄存器配置

void SPI_Configuration(void)

{

   SPI_InitTypeDef SPI_InitStructure;

    //配置SPI1,2

   SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;   //全双工                            

   SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;                         //一次传送16位

   SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;   //无数据传输时时钟引脚保持低电平。死也没想到这里影响这么大,为什么改为High就会每复位一次,打印结果就变一次 ,若不是无奈改成手册里的例子,还不会发现是这里的问题

   SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;                      //第2时钟沿采样数据

   SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;                                   //NSS为软件模式

   SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_4;         //预分频值为8

   SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_LSB;                           //高位先发送

   SPI_InitStructure.SPI_CRCPolynomial=7;     

                            

   SPI_InitStructure.SPI_Mode=SPI_Mode_Master;

   SPI_Init(SPI1,&SPI_InitStructure);

   

   SPI_InitStructure.SPI_Mode=SPI_Mode_Slave;

   SPI_Init(SPI2,&SPI_InitStructure);



   SPI_Cmd(SPI1,ENABLE);

   SPI_Cmd(SPI2,ENABLE);

}


//SPI1作为主机发送数据

void SPI_SendData(u8 byte)

{

        while(SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_TXE)==RESET);

SPI_I2S_SendData(SPI1,byte);

}

 /*

void SPI_SendString(char* str)

{

   while((*str)!='') SPI_SendData(*(str++));

}  */


//SPI2作为从机接收数据

u8 SPI_ReceiveData(void)

{

  u8 data;

        while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);

        data=SPI_I2S_ReceiveData(SPI2);

return data;

}


为了方便,我直接将一块STM32上的两个SPI接口相接来检验,SPI1为PA5,PA6,PA7,    SP2为PB13,PB14,PB15.  


SPI1作为主机发送数据,SPI2作为从机接收数据。


推荐阅读

史海拾趣

High Tech Chips Inc公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视机与外部信号源的重要设备,具有高度的专业性和广泛的应用性。它不仅能接收来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,还能将这些信号转换成适合在电视机上播放的格式,极大地丰富了用户的观看体验。

机顶盒分为数字机顶盒和网络机顶盒两大类。数字机顶盒主要实现数模转换功能,使用户能用原有的模拟电视机观看数字电视,包括有线电视、卫星电视和地面广播电视的数字机顶盒。而网络机顶盒则进一步扩展了功能,能接入互联网,提供如IPTV、视频点播、在线游戏、网页浏览等多元化服务,使电视机转变为一个智能互动终端。

机顶盒的工作原理涵盖接收、解码和显示三个关键步骤。通过内置的调谐器接收信号,解调器将信号从载波中提取,解码器再将信号转换为电视可识别的视频和音频流,最终通过电视机呈现给用户。随着技术的不断进步,机顶盒的功能也在不断升级,如支持4K、8K超高清视频播放,搭载智能推荐算法提供个性化内容推荐,以及通过语音识别技术实现便捷操作等。

综上所述,机顶盒作为连接电视与互联网的重要桥梁,其专业性和科普性不言而喻。它不仅为用户提供了丰富多彩的电视节目和娱乐选择,还推动了电视产业的智能化发展,成为现代家庭不可或缺的一部分。

Davico Industrial Ltd公司的发展小趣事

Davico Industrial Ltd公司发展故事一:技术突破与创新

Davico Industrial Ltd公司自创立以来,始终将技术创新作为企业发展的核心动力。在公司成立初期,面对电子行业竞争激烈的局面,Davico凭借对市场的敏锐洞察和对技术的不断追求,成功研发出了一款具有划时代意义的电子元器件。这款产品以其高性能、低能耗的特点,迅速在市场中占据了一席之地。此后,Davico不断加大对研发的投入,通过引进高端人才、建立先进的研发实验室等举措,持续推出了一系列具有竞争力的新产品,为公司的发展奠定了坚实的基础。

Davico Industrial Ltd公司发展故事二:市场拓展与品牌建设

随着技术实力的不断增强,Davico开始积极拓展国内外市场。公司通过与国内外知名企业的合作,不断提升产品的知名度和美誉度。同时,Davico还积极参与各类行业展会和论坛,展示公司的最新成果和技术实力,赢得了广大客户的认可和信赖。在品牌建设方面,Davico注重塑造企业形象和文化内涵,通过广告宣传、公益活动等方式,提高了品牌的社会影响力和知名度。

Davico Industrial Ltd公司发展故事三:质量管理与持续改进

Davico深知产品质量对于企业生存和发展的重要性。因此,公司始终将质量管理放在首位,建立了完善的质量管理体系和检测手段。通过对生产过程的严格控制和对产品质量的不断追求,Davico的产品在市场中赢得了良好的口碑。同时,公司还积极开展持续改进活动,通过引进先进的生产设备和工艺、优化生产流程等措施,不断提高生产效率和产品质量。

Davico Industrial Ltd公司发展故事四:人才战略与团队建设

Davico高度重视人才队伍建设,通过制定合理的人才战略和激励机制,吸引了一批批优秀的人才加入公司。公司注重员工的培训和发展,通过定期的技能培训、知识更新等活动,不断提升员工的综合素质和专业技能。同时,Davico还建立了完善的团队协作机制,鼓励员工之间的沟通和合作,形成了一支高效、团结、富有战斗力的团队。

Davico Industrial Ltd公司发展故事五:绿色发展与社会责任

随着全球环保意识的不断提高,Davico积极响应国家绿色发展的号召,将环保理念融入到企业的生产经营中。公司通过引进环保设备、改进生产工艺等措施,降低了生产过程中的能耗和污染排放。同时,Davico还积极参与社会公益事业,通过捐款捐物、扶贫济困等方式,回馈社会、造福人民。这些举措不仅提升了企业的社会形象,也为公司的长远发展注入了新的动力。

Elprotronic Inc.公司的发展小趣事

在电子行业中,客户服务质量直接关系到企业的声誉和市场竞争力。Elprotronic Inc.深知这一点,因此一直致力于优化客户服务体系。他们建立了专业的客户服务团队和客户服务热线电话等多种渠道来及时解答客户的咨询和问题。同时,公司还定期开展客户满意度调查活动收集客户反馈和建议以便及时改进和优化产品和服务。这些努力使得Elprotronic Inc.在客户服务方面赢得了良好的口碑和信誉也为公司的长期发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在展示Elprotronic Inc.公司可能的发展路径和故事。实际情况可能有所不同,具体细节请以公司官方发布的信息为准。

Heraeus公司的发展小趣事

在电子行业中,客户服务质量直接关系到企业的声誉和市场竞争力。Elprotronic Inc.深知这一点,因此一直致力于优化客户服务体系。他们建立了专业的客户服务团队和客户服务热线电话等多种渠道来及时解答客户的咨询和问题。同时,公司还定期开展客户满意度调查活动收集客户反馈和建议以便及时改进和优化产品和服务。这些努力使得Elprotronic Inc.在客户服务方面赢得了良好的口碑和信誉也为公司的长期发展奠定了坚实的基础。

请注意,以上故事均为虚构内容,旨在展示Elprotronic Inc.公司可能的发展路径和故事。实际情况可能有所不同,具体细节请以公司官方发布的信息为准。

Hmc Inc公司的发展小趣事

在2010年代初,一家名为“HyperMemory Corp”的初创公司,在硅谷的隐秘实验室中,成功研发出了HMC技术。这项技术通过三维堆叠封装技术,极大地提升了内存带宽和能效,引起了业界的广泛关注。为了加速技术的商业化进程,HyperMemory Corp与多家行业巨头,包括英特尔和美光,建立了混合内存立方联盟(HMCC)。通过共享技术资源和市场渠道,HyperMemory Corp迅速成长为HMC技术的领军企业。

海芯科技(AVIA)公司的发展小趣事

为了进一步拓展业务和提升公司的竞争力,海芯科技积极寻求与行业内外的合作伙伴建立战略合作关系。通过与上下游企业的紧密合作,海芯科技成功实现了产业链的整合和优化,进一步提升了产品的质量和性能。同时,公司还通过与国际知名企业的合作,将先进的技术和管理经验引入到公司内部,为公司的发展注入了新的活力。

问答坊 | AI 解惑

基于FPGA的双路可移相任意波形发生器

本帖最后由 paulhyde 于 2014-9-15 03:22 编辑 一个给予FPGA的双路可移相任意波形发生器设计,上面有代码及详细的设计。挺好的参考资料。  …

查看全部问答>

新手入门——无线词语解释通俗版

香农定理类比:城市道路上的汽车的车速和什么有关系?和道路的宽度有关系,和自己车的动力有关系,也其他干扰因素有关系(如:车量的多少和红灯的数量)。 香农定理是所有通信制式最基本的原理。 C=Blog2(1+S/N): 其中C是可得到的链路速度,B是 ...…

查看全部问答>

关于做红外传感器模块的感想

由于是第一次做红外传感器,所以自己到网上搜了几个电路,发现了很多问题,和大家分享一下。 第一个问题就是检测电路是否正确,我一开始就上来就做,其实是错误的,后来就发生了怎么调电路 的结果都是错误的。(其实错误的一塌糊涂) 所以很好 ...…

查看全部问答>

wince 6.0 nk.bin大于32M 下载失败

wince 6.0增加简体字库后,NK.bin就有33M了。 想把NK.bin调大,如35M 1、修改Bootloader\\Eboot\\eboot.bib,修改如下: //#define ROM_RAMIMAGE_SIZE           0x02000000        ...…

查看全部问答>

单片机中发送双音频是怎么回事

大家好,在单片机中发送双音频是怎么回事? 发送双音频和发送单音频有什么区别和联系? 我现在做的是报警器,一个主机接收,手持机用于发送 里面用到双音频,还有发送一位单音频,这样的发送有什么方法可以看得出来? 谢谢! …

查看全部问答>

请教DX:FMD_OEMIoControl: unrecognized IOCTL (0x71c24)问题

现在烧录mini2440自带的文件都ok 烧录我自己build的nk.bin有问题,请DX帮看看 多谢 我自己build的 release版本,大小16M不到 下面为串口信息: Windows CE Kernel for ARM (Thumb Enabled) Built on Sep 25 2009 at 11:04:23 +OEMInit DCach ...…

查看全部问答>

AT命令集的问题

AT命令集的定义是怎样的?是不是很复杂,用它是不是很麻烦? 我是外行,我想了解一下AT命令集,想知道如何更好更快的学会使用它. …

查看全部问答>

怎么通过WAVEINOPEN那些API函数把音频数据录成原始的PCM文件(没有压缩,没有处理过)?在网上没找到,只找到录成WAV文件的例子

怎么通过WAVEINOPEN那些API函数把音频数据录成原始的PCM文件(没有压缩,没有处理过)?在网上没找到,只找到录成WAV文件的例子! //------------- 希望能够给个简单的例子程序啊!…

查看全部问答>

为什么我每次创建菜单后都出现fatal error RC1015: cannot open include file 'afxres.h'.。。

为什么我每次创建菜单后都出现fatal error RC1015: cannot open include file \'afxres.h\'.。。 我创建菜单后,就inclue \"resource.h\" 然后编译 每次都是这个错误 为此 我实验过 重装evc \\sdk\\但是还是 这样 所以求救。。还有 一个问题我写 ...…

查看全部问答>