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
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348720
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1614

    浏览量

    89586
  • 主从通信
    +关注

    关注

    0

    文章

    7

    浏览量

    3514
收藏 人收藏

    评论

    相关推荐

    stm32的qspi有主从机之分吗?

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

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

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

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

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

    AD9945与STM32之间通过SPI通信通信时序怎么写?

    我最近做一个CCD的项目,需要用到AD9945,因为他的频率高,但是AD9945怎么与STM32F103外部引脚连接,他输出的12位并行数据接到哪里?还有AD9945与STM32之间通过SPI
    发表于 12-05 08:28

    SPI通信协议原理是什么

    UART串口通信中的数据只能一位一位的传输,如果数据量比较大的时候,传输速率会受到很大影响,此时我们就可以考虑使用同步串行通信了,比如SPISPI
    的头像 发表于 11-24 17:37 407次阅读
    <b class='flag-5'>SPI</b><b class='flag-5'>通信</b>协议原理是什么

    基于单片机的主从红外通信的系统设计

    电子发烧友网站提供《基于单片机的主从红外通信的系统设计.pdf》资料免费下载
    发表于 11-16 15:56 0次下载
    基于单片机的<b class='flag-5'>主从</b>红外<b class='flag-5'>通信</b>的系统设计

    SPI上拉合不上拉的区别 UART和SPI的主要区别

     使用SPI接口时,需要根据具体的外设和系统需求来配置SPI的参数,如通信速度、数据位宽、主从模式等。主设备通过操作SPI相关的寄存器或调用
    的头像 发表于 11-10 16:47 3882次阅读

    CW32的SPI单工模式主从通信介绍

    CW32的SPI单工模式主从通信介绍
    的头像 发表于 10-24 15:50 408次阅读
    CW32的<b class='flag-5'>SPI</b>单工模式<b class='flag-5'>主从</b><b class='flag-5'>通信</b>介绍

    STM32中模拟SPI通信和硬件SPI通信的区别是什么?

    STM32中模拟SPI通信和硬件SPI通信的区别是什么
    发表于 10-16 06:55

    STM32 SPI基础内容

    、存储芯片、温度传感器等众多器件都有使用SPI接口通信。 这些器件通常作为从设备,单片机作为主设备来控制它们,今天就结合STM32来分析一下SPI常见
    的头像 发表于 08-19 09:14 2579次阅读
    <b class='flag-5'>STM32</b> <b class='flag-5'>SPI</b>基础内容

    标准4线SPI四根线有哪些

    SPI hardware SPI:Serial Perripheral Interface,串行外围设备接口,由 Motorola 公司提出,是一种高速、全双工、同步通信总线。SPI
    的头像 发表于 07-27 10:26 4694次阅读
    标准4线<b class='flag-5'>SPI</b>四根线有哪些

    STM32F1的SPI模块协议介绍

    SPI是是一种高速的,全双工,同步的总线通信方式。STM32F1低中容量设备的SPI模块支持主从两种模式。
    的头像 发表于 07-24 15:32 2160次阅读
    <b class='flag-5'>STM32</b>F1的<b class='flag-5'>SPI</b>模块协议介绍

    STM32SPI控制器实现SPI

    SPI是一种高速的,全双工,同步的通信总线,原理和使用简单,占用引脚资源少,是一种常用的通信方式。STM32通常有2~3个SPI接口。
    发表于 07-22 11:47 1783次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>SPI</b>控制器实现<b class='flag-5'>SPI</b>

    基于STM32SPI通信

    SPI是串行外设接口的缩写,是一种高速的,全双工,同步的通信总线。由于SPI高速和同步的特性,使其成为嵌入式系统和小型设备中使用最广泛的几种通信接口之一。本文将详细讲解一下
    的头像 发表于 06-21 15:08 1824次阅读
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>SPI</b><b class='flag-5'>通信</b>

    基于全志D1-H的Tina Linux SPI主从通信验证实录

    : Tina Linux 2.0 问题 验证D1H芯片SPI主从通信. 硬件接线 主机SPI 从机SPI 19
    发表于 05-22 10:23