历史上的今天
返回首页

历史上的今天

今天是:2025年01月13日(星期一)

正在发生

2021年01月13日 | STM32_SPI主从通信

2021-01-13 来源:eefocus

今天讲解“STM32F103 SPI主从通信”,原本计划将这部分内容定在后面(第二阶段)来讲解,满足一位网友的问题“关于两块MCU的SPI通讯”,所以今天特地提前讲解了。


由于昨天讲解的是“SPI读写Flash”,MCU是作为SPI通信中的主机,今天主要讲解SPI通信的从机,我将我测试的主机和从机的代码分别打包供大家下载测试。


今天提供并讲解的软件工程,基于昨天的软件工程“SPI读写Flash”修改而来。若有疑问,请关注微信公众号“EmbeddDeveloper”获取更多信息。

 

今天的软件工程下载地址(360云盘 - 密码见微信):

主机:https://yunpan.cn/cPIJguDkjntYI  访问密码 7bb6

从机:https://yunpan.cn/cPIJfZxr7D5Sk  访问密码 fd5a

 

STM32F10x的资料可以在我360云盘下载:

https://yunpan.cn/crBUdUGdYKam2   访问密码 ca90

 

测试原理及现象:主机间隔500ms发送10个字符(0-9),从机开启SPI中断接收数据,接收满10字节数据,置标志位gSPI_FlagOver有效,并变化LED,通过串口打印接收到的数据。

 

关于“STM32F103 SPI通信从机部分” 我把重要的几点在下面分别讲述,若不明白,请关注微信公众号“EmbeddDeveloper”查阅或留言。

 

一、RCC时钟配置

 

该函数位于在bsp.c文件下面;

使能RCC时钟:RCC_APB2Periph_SPI1

 

二、引脚配置

 

该函数位于在spi.c文件下面;

这里是对SPI所使用引脚进行配置。

注意:

SPI作为从机,MOSI作为从机接收而不是MISO,“今天的重点”我还会强调这点。

 

三、SPI配置

 

该函数位于在spi.c文件下面;

对SPI进行配置。

配置的每一条语句都有注释,请看源代码.

强调一点:SPI_CPOL_Low时钟空闲为低,这个引脚容易受干扰导致通信故障。

 

四、SPI中断控制器配置

 

该函数位于在bsp.c文件下面;

因为开启了中断接收数据,这里必须配置中断控制器。

 

五、SPI中断处理

 

该函数位于在stm32f10x_it.c文件下面;

文章开始就说明了:接收满10字节数据,置标志位gSPI_FlagOver有效。该函数就是这个意思。

 

六、主函数应用

 

该函数位于在main.c文件下面;

这就是文章开头“测试原理及现象”的描述,就不多说了。

 

六、今天的重点提示

A.主从连接方式:

这里对于开始学习的朋友来说,有点不理解(因为基本上都知道串口的通信,主机Tx对应从机Rx),还以为“主机的MOSI”连接的是“从机的MISO”,其实这里是和串口的区别之一(当然还有其他,这里不讲解)。具体请看参考手册。

 

 

B.常见问题

之前有写过关于SPI主从通信的实例。但是,我今天专门找了两套板子来测试,刚开始,通信始终有问题(从机不停地在接收0x00数据),结果发现两板子之间没有共地,找了根线接上,数据没有不停地接收了。


但新的问题又来了,开始接收的数据正确,一旦出错了一位,后面接收到的数据都不对了。我是不停的查看代码,开始始终怀疑代码有问题,但把代码该了无数次(不知道好多次)之后,手册看了几遍,上网也查了很久,还是一样的现象,结果,我用示波器测试了一下通信的时钟(SCK),频率有几M, 波形间隔大概只有100ns,我就怀疑问题出在通信的线上,线太长了(估计有四五十厘米),果不然,使用短点的通信线,问题就好了。


说实话,一个不起眼的问题,可能会耗掉你无数的时间,这里我将我走过的弯路告诉大家,希望不要走这条弯路,今后的分享中我也会将一些容易出错的地方拿到这里讲解。


推荐阅读

史海拾趣

ESS [ESS Technology,Inc]公司的发展小趣事

随着公司规模的不断扩大和市场份额的增加,ESS开始在全球范围内扩张其业务。ESS的分支机构遍布美国各地,同时也在中国、日本、韩国等地设立了海外机构。这些海外机构不仅有助于ESS更好地了解当地市场需求和竞争态势,还为公司在全球范围内推广其产品和服务提供了有力支持。ESS的全球战略布局为其在竞争激烈的半导体芯片市场中保持领先地位提供了有力保障。

Digital Core Design公司的发展小趣事

面对版权问题的挑战和市场的变化,Core Design开始寻求变革。公司的创始人Jeremy Heath-Smith和Adrian Smith在《古墓丽影:黑暗天使》发行后不久就辞去了在Eidos和Core的职务,并创立了新的工作室Circle Studio。然而,这个新工作室最终也未能逃脱被市场淘汰的命运。在2006年6月,Circle Studio被Eidos彻底抛弃,并卖给了另一家公司Rebellion。虽然Core Design的名字被保留下来,但其实际的开发团队和运营已经发生了巨大的变化。在这个过程中,Core Design不得不面对现实,寻找新的发展机遇和方向。

以上这些故事展示了Core Design在电子行业中的发展历程,包括其初创时期的艰辛、成功时期的辉煌、挑战时期的困境以及变革时期的新生。这些故事都基于事实,旨在客观地呈现Core Design的历史和发展。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:随着技术的成熟,Galaxy Microelectronics开始寻求与大型电子产品制造商的合作。

发展:2005年,Galaxy Microelectronics与一家领先的智能手机制造商达成合作协议,为其旗舰产品提供定制化的NAND闪存解决方案。这一合作不仅让Galaxy Microelectronics的产品迅速进入市场,还显著提升了其品牌知名度。随后,公司陆续与多家知名电子产品厂商建立合作关系,进一步巩固了其在闪存市场的地位。

达晶微(CREATEK)公司的发展小趣事

达晶微(CREATEK)公司成立于XXXX年,由一群具有丰富半导体行业经验的专家创立。公司初期主要专注于IGBT、MOSFET、FRD、TVS、SBD等功率半导体芯片与器件的研发。凭借其对技术的深刻理解和市场需求的敏锐洞察,达晶微迅速在市场中崭露头角。

Greenconn Corp公司的发展小趣事
如果经检查发现继电器或定时器故障,需要按照冰箱型号和规格要求更换新的部件。
Alpha & Omega Semiconductor(万国半导体)公司的发展小趣事
确保冰箱内部和外部的线路连接牢固,如有松动需重新连接。

问答坊 | AI 解惑

高手请进:proteus一仿真就卡死

proteus一仿真就卡死 我的电路在proteus一仿真就卡死,卡死时,最下面那个框里显示如下这段字母:SIMULATE:Running PROSPICE.DLL[C:\\DOCUME~1\\syb\\LOCALS~1\\Temp\\LISA1101.SDF] 请问这是为什么?如何解决,谢谢!…

查看全部问答>

施耐德ats46软启动器故障解决方法

问题:  施耐德ats46 110kw软启动器故障为:启动完成后,继电器R2不动作。{指启动10秒以后} 具体为:负载为110kw电机;软启动器的参数设置为:电机额定电流200A;电机限幅电流400A;加速力矩斜坡10秒其余参数全部为工厂设置。 &n ...…

查看全部问答>

快疯了,100分eVC测试

开发板上有几个跳线,我写了一个测试的程序,却出问题了,大家帮忙看看... 跳线驱动部分内容: BOOL Addr_Init() {    //地址映射 } BOOL WINAPI  DllEntry(HANDLE hInstDll,DWORD dwReason,LPVOID lpvReserved) ...…

查看全部问答>

请问有人测过AT91RF40008的功耗么

看它的DATASHEET上写的功耗是0.83mW/MHz,有用过的人测过这个功耗值可靠么?…

查看全部问答>

在evc4.0开发环境,多边形外环和内环填充的问题

我有1个问题请教,在evc4.0开发环境,那位做过多边形外环和内环填充的项目,我用polypolygon这个函数,可是他不支持evc,在vc下面好用。 我要达到的效果外环里面的内环不被填充,可是在evc4.0下内环也被填充了。请问是这个函数polypolygon不支持ev ...…

查看全部问答>

有没有DX用STM32做过视频处理呢?

                                 当然做标准的通用视频处理可能是不够的,但是如果对专门的QVGA,CIF等格式做视频处理的话,STM32能否满足需求呢?…

查看全部问答>

【求助】请问这是什么原因?

我用经典的串口的测试程序,在线仿真时发送和接收都正常。但是如果只用外部电源供电,不接仿真器,单片机发给pc的数据就接收不到了。如果这时再把仿真器连上,这是只是连上,不开IAR编译器,工作又正常了。我做板子的时候因为考虑到用外部电源供电 ...…

查看全部问答>

谁知道下面形状的焊盘如何画

如题,谁知道图中120这样的焊盘如何利用AD画。 [ 本帖最后由 苍穹的眼泪 于 2011-10-18 13:14 编辑 ]…

查看全部问答>