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

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

3天内不再提示

关于STM32定时器触发SPI逐字收发之应用示例

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-01-14 16:35 次阅读

我们在做SPI应用时,有时希望通过定时器来定时地触发SPI的收发,并利用DMA完成数据的传输。这里,以STM32L476芯片为例来做个演示,以供参考。

本示例的大致过程是这样的:

片内SPI1做Master,SPI2做Slave,均工作在全双工模式。

这里使用片内定时器TIM3,通过它的更新事件触发DMA请求,通过DMA将数据给到SPI1的数据寄存器并发送出去,同时也开启SPI1接收事件的DMA传输。总之,SPI2的收、发事件都启用DMA完成。

TIM3的更新事件周期控制两个SPI的收发节奏,即定时器每产生一次更新事件,SPI1/SPI2这两个主从通信模块就进行一个数据的收发。我们可以通过调整定时器的计时周期来调整数据收发的快慢。

好,先基于STM32CubeMx进行初始化配置。

1. 对TIM3做基本配置。选择时钟源,先大致估算个定时器计时周期,调试时我们可以自行灵活调整。

开启基于TIM3更新事件的DMA配置。传输方向是从Memory 到 外设SPI1,即将内存数据传输到SPI1的数据寄存器进行数据发送,这里选用循环模式,以便测试。

2. 对SPI1/SPI2进行基本配置。细节请参看下面三幅截图。

3、DMA的配置情况。

在TIM3和SPI1/SPI2外设配置中,开启了相关事件的DMA请求,汇总如下图。

4、准备用户代码。

当完成基于STM32CubeMx的初始化配置并生产初始化代码后,我们准备相应的用户代码。这里准备了4个内存数组,分别用于存放SPI1/SPI2的收发数据。

在定时器的触发下,Master SPI1逐字的向Slave SPI2发送“Hello! I AM STM32!”,Slave SPI2也逐字的向Master回应“HI,MASTER,ME TOO!”,这样循环操作。下面两幅截图是本示例中使用到的用户代码,是基于STM32Cube固件库而编写的。应该说简单明了,无须过多解释。

5、结果验证。

下面的截图是两个不同时刻SPI通信时的信号波形图。其中,紫色的是时钟信号,绿色、黄色是数据信号。两个数据信号间的时间间隔由定时器的更新周期决定。

下面的截图是在调试状态下的通过观察窗口得到的SPI1/SPI2分别从对方收到的数据,即SPI2收到的数据是“HELLO,I AM STM32!”,SPI1收到的数据则是“HI,MASTER,ME TOO!”

整体上讲,上述应用的实现不难,可能稍微有点综合性。

要实现上述应用,首先要求我们对DMA传输的原理有清晰的了解,触发事件,传输源、传输目标几个概念及关系要弄清楚。

另外,即使我们基于STM32固件库开发,不一定能找到完整的现存例程,我们可能需要基于现有驱动代码自行组织用户程序。

还有,在上面示例代码中,我没有开启DMA的中断事件,我们在具体应用中可以根据情况来决定是否启用DMA中断,比方开启传输完成中断等。

最后顺便提醒下,这里我们基于定时器事件的DMA请求而自行指定DMA的源端和目的端,‍一定要保证是该触发事件所请求的DMA可以到达的地方。建议编程设计前最好查看下相关芯片数据手册里的芯片模块及总线框架图,不然的话,有时你可能遇到你指定的DMA根本就不正常运作的情况。

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

    关注

    2239

    文章

    10665

    浏览量

    348518
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1610

    浏览量

    89539
  • 定时器
    +关注

    关注

    23

    文章

    3144

    浏览量

    112006
收藏 人收藏

    评论

    相关推荐

    请问如何使用定时器的更新事件触发DMA读取6字节SPI数据?

    想用定时器的更新事件触发DMA读取SPI数据,现在有个问题是一次更新事件只能触发一次DMA传输,我想要定时器
    发表于 03-29 06:16

    STM32L0使用定时器上升沿触发ADC采样时,采样频率如何确定?

    我想问一下,在使用定时器上升沿触发ADC采样时,采样频率如何确定,是定时器频率就等于ADC采样频率吗?用的是STM32L0
    发表于 03-20 06:37

    STM32定时器时间计算方法

    将详细介绍STM32定时器时间计算方法。 STM32定时器基本结构 STM32定时器通常包含
    的头像 发表于 12-19 11:31 3516次阅读

    STM32如何使用定时器实现微秒(us)级延时?

    STM32如何使用定时器实现微秒(us)级延时? 在STM32微控制器中,可以使用定时器实现微秒级延时。具体来说,可以使用定时器的计数器和自
    的头像 发表于 11-06 11:05 2830次阅读

    STM32F407中定时器1和定时器5的触发关系是什么?

    为0时,接受来自定时器5的触发。但是SMS位既然已经是0,说明从模式应该已经被禁止了;但实际上定时器又确实被定时器3或者5给影响了。请问这是怎么回事呢?
    发表于 10-26 08:09

    STM32速成笔记(6)—定时器

    关于什么是定时器,简单来讲,就是是用来定时的。STM32F103ZET6有两个基本定时器TIM6和TIM7,四个通用
    的头像 发表于 10-24 09:41 1604次阅读
    <b class='flag-5'>STM32</b>速成笔记(6)—<b class='flag-5'>定时器</b>

    STM32各类系列定时器概览

    本文档:概述了 STM32F1xx、STM32F2xx、STM32F4xx、STM32L1xx 和 STM32F30/31/37/38x微控
    发表于 08-31 10:49 0次下载

    555定时器施密特触发器应用 555定时器施密特触发器工作原理

    555定时器是一种非常常见的集成电路,而555施密特触发器是555定时器的一个重要应用之一。555施密特触发器可以将输入的模拟信号转换为数字信号,并提供稳定的输出。
    的头像 发表于 08-24 15:12 3343次阅读

    STM32有哪几种定时器 STM32高级定时器有哪些功能

    SysTick定时器的功能比较单一,主要是供给系统使用的,系统默认设置为1ms触发一次中断。而用户想要使用自己的定时器STM32提供的用户定时器
    的头像 发表于 07-27 16:25 3815次阅读
    <b class='flag-5'>STM32</b>有哪几种<b class='flag-5'>定时器</b> <b class='flag-5'>STM32</b>高级<b class='flag-5'>定时器</b>有哪些功能

    STM32 TIM—基本定时器

    STM32F4xx系列控制器有共有14个TIM定时器。其中2个高级控制定时器TIM1和TIM8、10 个通用定时器TIM2TIM5和TIM9TIM14、 2个基本
    的头像 发表于 07-22 17:05 3272次阅读
    <b class='flag-5'>STM32</b> TIM—基本<b class='flag-5'>定时器</b>

    STM32定时器(一)PWM输出

    STM32定时器分类众多,按照内核、外核标准分为两部分:核内定时器+核外定时器
    的头像 发表于 07-21 14:51 2642次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>(一)PWM输出

    STM32CubeMx入门教程(3):定时器的使用

    导语“ 使用STM32CubeMx 生成初始化定时器代码,实现定时器特定定时
    发表于 07-11 15:22 2288次阅读
    <b class='flag-5'>STM32</b>CubeMx入门教程(3):<b class='flag-5'>定时器</b>的使用

    一个定时器输出4路不同频率波形的应用示例

    一般来讲,一个STM32定时器输出基于同一频率的各路信号比较方便。但经常也会有人问使用STM32一个定时器是否可以实现多路不同频率的输出。
    的头像 发表于 07-06 15:57 1183次阅读
    一个<b class='flag-5'>定时器</b>输出4路不同频率波形的应用<b class='flag-5'>示例</b>

    STM32F407 基本定时器使用

    介绍STM32F407基本定时器的配置方法,分别介绍轮询方式、中断方式使用定时器完成定时
    的头像 发表于 07-06 14:32 2090次阅读
    <b class='flag-5'>STM32</b>F407 基本<b class='flag-5'>定时器</b>使用

    STM32定时器介绍

    本文将介绍STM32定时器的一些基本概念性的东西,方便后面内容的理解学习。
    的头像 发表于 04-21 11:33 2032次阅读
    <b class='flag-5'>STM32</b><b class='flag-5'>定时器</b>介绍