0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32_ SPI主从通信

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-04-08 10:54 次阅读

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

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

每天提供下载的“软件工程”都是在硬件板子上进行多次测试、并保证没问题才上传至360云盘。

今天的软件工程下载地址(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,通过串口打印接收到的数据。

关于“STM32F103SPI通信从机部分”我把重要的几点在下面分别讲述,若不明白,请关注微信公众号“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,我就怀疑问题出在通信的线上,线太长了(估计有四五十厘米),果不然,使用短点的通信线,问题就好了。

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

下载方式:长按网站 ->选择复制 ->打开

或者复制网站在电脑上下载也可。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2274

    文章

    10929

    浏览量

    358017
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1724

    浏览量

    92286
  • 主从通信
    +关注

    关注

    0

    文章

    7

    浏览量

    3556
收藏 人收藏

    评论

    相关推荐

    SPI通信总线概述和Verilog实现

    SPI = Serial Peripheral Interface,是串行外围设备接口,是一种高速,全双工,同步的通信总线。
    的头像 发表于 02-07 14:28 635次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>通信</b>总线概述和Verilog实现

    iic协议与spi协议的区别

    I2C协议与SPI协议的区别 1. 通信方式 I2C :是一种多主机、多从机的通信协议,使用两条线(数据线SDA和时钟线SCL)进行通信SPI
    的头像 发表于 02-05 11:28 355次阅读

    如何用ADS1271的SPI接口模式与STM32进行通信

    现在用ADS1271EVM,该模块是用两个DAS1271以菊花链式连接的,我打算用STM32F446的SPI来连接该模块。我查了手册得知ADS1271进行SPI接口模式配置后,最后在VRVD输出
    发表于 12-31 08:08

    STM32F407和ADS8684进行SPI通信,寄存器怎么配置?

    通过STM32F407和ADS8684进行SPI通信,阅读了ADS8684的手册,配置STM32F407为主,CPOL为0,CPHA为1,这样对吗? 配置好后应该先设置ADS8684
    发表于 12-20 06:25

    KeyStone架构串行外设接口(SPI)手册

    SPI(Serial Peripheral Interface)是一种高速、全双工、同步的串行通信协议,它允许微控制器与一个或多个外围设备进行通信SPI
    发表于 12-16 10:33 0次下载

    使用stm32SPI5通信接口与DAC1282通信失败了怎么解决?

    使用stm32SPI5通信接口与DAC1282通信失败,如何查看是否写入寄存器了,我写程序对reset接口来复位DAC为啥输出还是啥也没有
    发表于 12-06 07:31

    DS1302芯片与FPGA之间SPI通信原理

    本文通过以DS1302芯片为基础,介绍该芯片与FPGA之间SPI通信原理,详细描述硬件设计原理及FPGA SPI接口驱动设计。
    的头像 发表于 10-24 14:16 653次阅读
    DS1302芯片与FPGA之间<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>原理

    SPI通信协议的基本概念和工作模式

    SPI(Serial Peripheral Interface)通信协议,即串行外围设备接口,是一种高速、全双工、同步通信总线,由摩托罗拉公司提出并广泛应用。SPI以其高效的数据传输能
    的头像 发表于 09-09 17:04 2178次阅读

    单片机SPI通信实现

    在深入探讨单片机(如基于STM32、AVR、PIC等)如何通过SPI(Serial Peripheral Interface)进行通信之前,我们先概述SPI
    的头像 发表于 09-09 17:00 824次阅读

    探索SPI单线传输模式中时钟线与数据传输的简化

    通信的简化需求也日益增加。在这种背景下,SPI的单线传输模式成为了一个备受关注的解决方案。 SPI协议概述 SPI协议是一种常用的同步串行通信
    的头像 发表于 05-28 18:26 1297次阅读

    请问STM32F103 I2C通信SPI通信哪种方式更稳定?

    STM32F103这颗料I2C通信SPI通信哪种方式更稳定?
    发表于 03-22 06:24

    stm32的qspi有主从机之分吗?

    请教一下,stm32的qspi有主从机之分吗,我看的是stm32wb55系列的手册,clk只有输出,是只能配置成主机模式吗?还是说qspi是不分主从机机的?
    发表于 03-21 08:20

    SPI双机通信有极低概率丢帧要如何处理?

    SPI主从通信主从站用的是相同的板子,主站采用定时器触发中断发收,从站也采用中断触发发收,未使用DMA,可以正常通信收发数据,
    发表于 03-18 06:07

    请问STM32F405RGT6的SPI通信最高时钟频率是多少?

    STM32F405RGT6的SPI通信最高时钟频率是多少?
    发表于 03-15 08:23

    PSoC6 SPI主从通信异常的原因?

    两块PSoC6 BLE Pioneer Kit CY8CKIT-062-BLE 开发板,都烧录CE22112001 - Low_Level_DMA_SPI_Master工程,每个板子各自短接主从
    发表于 02-18 08:58