付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本以为与在同一片 STM32STM32 上做 SPISPI 主、从机通信一样,以为挺简单的,但是实际做起来还是遇到了不少问题,比如出现数据移位、多出了一些数据等问题。下面简单分享一下实现过程:一、整体框图及说明这里使用 STM32F429IGT6STM32F429IGT6 作为主机,STM32F103ZETSTM32F103ZET 蚱为从机,Xo本例要实现的功能就是主、从机之间的数据互传。主机往从机发送的数据为:产生随瞒代出课uiit8_tuNi_Hufiei_Lc|BuffiE3in=uiit8_tuNi_Hufiei_Lc|BuffiE3in=CriCri:,0iD3,0iD3r rOiM
2、,DilSOiM,DilSr rUK.hUK.h二,QM03QM03r rMJt,MJt,HiOaHiOar r亚JKGD,4 4n ntdltdlr rQiUFQiUFt t:!cdcd二以.h h: JI5HJKy.y. r rit,Ik,it,Ik,.仃。iiii昭,JiL,JiL,xi,“f fr rJiJir r, / /,必必; *瓜TkTk九三x.x(lx.x(lr rx-x-t tt.!t.!DiDi, : l.l., JiJi- -f fi ir r.i.i.:r rJi.Ji., ,:x?Jx?J( (./E|./E|.J.?.J.?r r./:J*J* *一一. .、.:
3、-:.:-:;:;STM32F429IGT6控制板:;主机STM32F1O3ZET6控制板从机MISO都配置为全双-GND从机往主机发送的数据为:,Bin,BinBIrw,rw,1 1甄心柜(王强辑V Vlidljlidlj丽艮掘昵,的他超闻-酶此E%做匍田二飒皿皿:屿心一环二叫二*二心一心:也B1ALB1AL。心,1 1J J二公:盒.C1U,C1U,启r4:%皿:加一由建,心:忠1 1:曲)1)13,3,4 心一思.【心1r心-d:山一以,二国,.心,kdQkdQ叫 13心,以温.小,5 心、吟.叫:54:54:端I I;二、关键代码|主机关键代码:IntrIntrziaLnziaLn(
4、(yoidyoid)1t)1tbsp_3Prl_Initbsp_3Prl_Init()(); ;whileucTKltixButferSiie( (等港发送缓冲区为空V Vwhila(SPI_l23_Setwhila(SPI_l23_SetFlagStatus(3PIlFlagStatus(3PIlr r3 3PI_12S_FIAG_rXEPI_12S_FIAG_rXE) )- -RESET)RESET); ;3Pl_l23_5endData3Pl_l23_5endData(5PI1(5PI1, ,UCSFI Il_suffer_Txl_suffer_Tx ucrxldx+1ucrxldx+1
5、1 1;人号待揍收最冲区非空 7while(SFiiZs&etFlagstacuswhile(SFiiZs&etFlagstacus(3PIU(3PIU3P1_L2S_FLAG_RXNE)-RESET;ucSPIl_BuffucSPIl_Buff r_RxucRjcIdx+Jr_RxucRjcIdx+J= =SPI_l23_Rac*SPI_l23_Rac*iv*Data(9PI1)iv*Data(9PI1); ;1 1 一-while(1)while(1)n nreturnreturn0;0; 从机关键代码:intintmainmain(void)(void)/上电初始化*/3y3y Enlt
6、0Enlt0; ;启动体瑜 7whilwhil (SPI_l2S_G#tFlig3taT(SPI_l2S_G#tFlig3taT:uaua1 19Pl29Pl2f f3PI_l2S_riAjG_TKE)3PI_l2S_riAjG_TKE)= =RESET);Stl_lRESET);Stl_l:3_deRdData3_deRdData(5X2,-x)(5X2,-x);/*放帚傕骊 7xhiLexhiLeucTxIcbcucTxIcbc EufEuf e e工3131工匕卜卜挣博发送绽冲区为空“whilawhilaiSPII2EGfiFla5Statiis(SPI2,8PIiSPII2EGfiFl
7、a5Statiis(SPI2,8PI123123ETAS_TXI)ETAS_TXI)= =RERE曰ETET卜:StI_I3J_StI_I3J_ndDat*ndDat*(4PEJ,ucflPI2_Buf(4PEJ,ucflPI2_Buff f r_Txr_Tx【uub1dx+uub1dx+) ):C 等清接收正冲区非空 7whilewhile(3FI_l2?_GerlagStatU3(3FI_l2?_GerlagStatU3SPl2SPl2r rSPlIiflFLAGRXNESPlIiflFLAGRXNEI I-RESETIRESETI; ;uuariZsufuuariZsuffarKxfar
8、Kx【n n亡xxi.lx+xxi.lx+- -12=RftCBiv4h&Ta;12=RftCBiv4h&Ta;wbils(L)wbils(L)(可见,主机与从机的代码大多都一样。只是从机多了一步启动传输的操作,这一步很关键,少了这一步传输就不正常。这是为了制造主机发送的同时也要接收到数据的条件。这一点参考手册里也有相关说明:主殿下开始传输全双碟邮DIMOOERDIMOOER并4RX0NLY4RX0NLY叫据到SPIDRSPIDR寄存器假送援冲器)后专输开始:-嫌造第吨版施时,魏被肺地烦掇据懒到啦的蒯转署屯瓯桃帛碰翻翻M08M08同肚;-与此同时.掷ISOISO引耻鼬蜘心接阐裱靴地榭型入龄此的
9、调霞中,然部肺雌也SPISPIDRDR省罐脚嬷海电从模式下开始传输全双工模式(8IDMOOE=0#II.RXONLY=0)-当从设备接收到时钟信号并且第一个数据也出现在它的MOSI时,数据传输开始,随后的数据位依次移劭班人移位寄存零1-。此同时,粕传精第一个数据位时,发送缓冲器中的敢抠被并行地传送到日也的移位寄存器.随后被出行地发送到MISO弓I脚上.软件必须保证在SPI主役招开始数据传输之前在发送寄存器中耳人嬖发送的数据.此处,要营造这样的条件,必须先启动从机,然后再启动主机。只有保证主机发送的同时有接收到数据,才能保证其时序的正常,否则可能会产生数据错位,或者会产生多余数据等情况。三、调试
10、我们平时在做实际的开发时,一般很难做到把所有代码写完,跑一遍就能成功,都是需要进行各个子模块的调试,一步一步来,确保各个子模块都没有问题之后,整体跑起来自然就比较稳定。一些经验丰富的软件工程师常会教导一些年轻的软件工程师: 在接到一个开发任务之前,先不要急着码代码,首先需要明确你这项任务的需求是什么,把任务分解成各个模块,然后在电脑上或纸上画出整体框图,确保框图的正确性之后,再根据框图来编写代码、调试。同样的,我的主管也是这么教导我们的。此处,我们要调试 SPISPI 主从通信,自然也是这样分模块进行调试的:?确认主机是否能正确发送数据?确认从机是否能正确发送数据(返回数据给从机)?确认从机是
11、否接收到主机发过来的数据?确认主机是否接收到从机发过来的数据若这几个点明确了,都没问题之后。就可以明确我们的 SPISPI 主、从机的基本通讯没有问题了,之后就可以进行我们的协议方面处理了(本例中没有这一部分)。下面分别看一些这几个点:1 1、确认主机是否能正确发送数据方法:使用逻辑分析仪捕捉主机的 MOSIMOSI、SCKSCK 这两条信号线,查看其波形。实际测得地结果如下:题了。此处,细心的朋友可能会发现时钟线波形的两个数据交互处的高电平总是宽一些,这里我们的 SPISPI 传输数据的位数设置为 8bit8bit,则每一个数据对应的第 8 8 位对应的时钟信号的高电平总会长一些;若我们的
12、SPISPI 传输数据的位数配置为 1616 位,则第 1616 位对应的时钟信号的高电平总会长一些。出现这个现象其实与我们的代码是有一定关系的。实际测试中发现是因为我们用whilewhile 循环来做逻辑处理的问题,想办法把 whilewhile 等待替换为 ifif 判断,就可以改善这个问题。但是考虑到这并不会影响我们的数据,并且另一方面还有助于我们分析波形,所以使用 whilewhile。2 2、确认从机是否能正确发送数据(返回数据给从机)使用逻辑分析仪来捕捉 MISOMISO 的波形,其波形如下(此处只捕捉了数据波形):显然,我们的从机发送数据也是没问题的。3 3、确认从机是否接收到主
13、机发过来的数据这里使用在线调试的方法检测从机的接收 bufbuf, ,结果如下:L 主机工从拒既老为胃JIJI一uiMuatuEjDiiffInftirflltTluiMuatuEjDiiffInftirflltTl其中,白色为 SCKSCK 信号线波形,橙色为 MOSIMOSI 信号线波形。显然,从 MOSIMOSI 波形可以看出其与我们主机发送的数据一致,自然就可以确认主机发送数据没问*UH,壬土新帘WatchWatch1 1以网NameNameVaMVaMTypeType0 0上ucSPOBuffer.feucSPOBuffer.fe0 x200000 x200000404wWIZBuw
14、WIZBuunsigriunsigri* *- -m m0 x010 x01un5ignun5ign iiM2M2undgnundgn心?22也B Bun5ignun5ign;“引thfldthfldunsigriunsigri;4 40 x050 x05unsignunsign3 355QMunsignunsignj|-ChdO7ChdO7un5ignun5ign3 377OxOSOxOSunsignunsigng g闻M9M9unsignunsign/闻口MAMAunsigr_ICICMBMBunsignunsign- -1111OxOCOxOCunsignunsign:112OMDOMDunsgrq qMIMEMEunsignunsign;MMOxOFOxOFunsigriQ Q115115MFMFunsignunsignw 阿OxfllOxfllunsign9 9HHM2M2unsignunsign*阿0 0J J(03(03uneignuneign网M4M4unsign*期口M5M5unignunignV V21210 x050 x05u
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026过程可视化软件产业链结构及市场前景预测研究报告
- 2026竹笋加工技术行业现状研究分析产业升级教育支持
- 2026工业软件云化迁移痛点解析与订阅制收费模式接受度调研报告
- 2026中国金融科技监管政策演变及商业模式转型分析报告
- 2026防晒护肤行业市场季节波动及技术创新与资本运作评估
- 抗结核药分类及联合应用总结2026
- 2026汽车制造行业市场供需现状分析及投资评估规划研究分析
- 20260技术市场格局分析及制造业转型与商业价值实现路径报告
- 电缆故障查找技师试题及答案
- 皮肤科相关试题及答案
- 北京市大兴区司法局面向社会招聘劳务派遣人员40人考试备考试题及答案解析
- 2026年秋季小学语文开学第一课 学科核心素养解读课件
- 2026高考化学试题贵州卷评析及教学启示讲座
- 建筑工地二氧化碳泄漏应急演练脚本
- 英语+答案【天域全国名校协作体最后一考】天域全国名校协作体2026年5月高三年级5月28日考前模拟联考(5.28-5.29)
- 手术管理委员会工作制度
- 2025安徽合肥水务集团有限公司招聘56人笔试考试备考试题及答案解析
- GB/T 6728-2025结构用冷弯型钢
- 浙南名校联盟2025-2026学年高三上学期10月联考思想政治试卷
- 经络推拿课件
- 智慧农业技术专业教学标准(高等职业教育本科)2025修订
评论
0/150
提交评论