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

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

3天内不再提示

基于STM32L476芯片来做个演示

茶话MCU 来源:ST MCU 信息交流 2019-11-20 14:57 次阅读

我们在做SPI应用时,有时希望通过定时器定时地触发SPI的收发,并利用DMA完成数据的传输。这里,我基于STM32L476芯片来做个演示,以供参考【为什么选用32L476,其实没啥特别原因,只是顺手找了块Nucleo板】。

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

片内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的收发数据。

在定时器的触发下,主SPI1逐字的向从SPI2发送“Hello! I AM STM32!”,从SPI2也逐字的向主SPI1回应“HI,MASTER,ME TOO!”,就这样循环操作。

下面两幅图是本示例中使用到的用户代码截图,是基于STM32Cube固件库而编写的。应该说简单明了,无须多做解释。

5、结果验证。

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

下面的截图是在调试状态下的通过观察窗口得到的SPI1/SPI2分别从对方收到的内容。

最后小结下。整体上讲上述应用的实现不难,稍微有点综合性。

要实现上述应用,首先要求我们对DMA传输的原理有清晰的了解,触发事件,传输源、传输目标几个概念及关系要弄清楚。另外,即使我们基于STM32固件库开发,不一定能找到完完整整的现存代码,我们可能需要基于现有驱动代码自行组织用户程序。还有,在上面示例代码中,我没有开启DMA的中断事件,我们在具体应用中可以根据情况来决定是否启用DMA中断,比方开启传输完成中断等。顺便提醒下,这里我们基于定时器事件自行指定DMA的源端和目的端,‍一定要保证是该触发事件所请求的DMA可以到达的地方,编程设计前最好查看下相关芯片数据手册里的芯片模块及总线框架图。

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

    关注

    447

    文章

    47772

    浏览量

    409074
  • STM32
    +关注

    关注

    2239

    文章

    10671

    浏览量

    348725
  • 定时器
    +关注

    关注

    23

    文章

    3147

    浏览量

    112034

原文标题:STM32定时器触发SPI逐字收发之应用示例

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32L476支持高速USB通信吗?

    我的板子是STM32L476的,现在要做一个usb通信,如果只是做全速USB的话不如直接用串口,所以想做高速USB,这就出现我现在的问题: 1.STM32L476支持高速USB通信吗? 2.如果支持,应该如何切换 3.PC端如果是WIN10应该使用什么驱动程序
    发表于 04-12 07:52

    STM32L476如何确认停机模式多外部中断唤醒对应的引脚?

    最近在用STM32L476,做一个中断唤醒触发计数的应用,遇到一个问题,如下: 1、初始化为4个外部中断下降沿唤醒,MCU外部上拉电阻,同时也使能了内部上拉,设置3个变量,在中断函数内分别对3个变量
    发表于 04-11 06:08

    STM32L476将端口设为模拟输入后无法进入stop2模式怎么解决?

    参考了STM32L476官方例程 在进入stop2模式前 将所有端口设置为模拟输入 GPIO_InitTypeDef GPIO_InitStruct
    发表于 04-10 08:09

    stm32l476 QSPI如何退出 Memory_Mapped MODE?

    由于STM32L476的QUADSPI 只支持在内存映射模式下的数据读取,不支持数据的写入 因此只能首先通过 HAL默认 的QSPI_FUNCTIONAL_MODE_INDIRECT_WRITE模式
    发表于 04-10 07:12

    STM32L476使用TouchGfx,编译会爆空间的原因?

    现在工作需要在STM32L476上使用TouchGFX。 现在Flash 内部是1M,RAM是128KB---屏幕分辨率是:800x480, 现在用cubeMX选择这样的分辨率,编译会爆空间。
    发表于 04-09 06:38

    STM32L476 LCD外设SEG管脚奇数周期非活动状态没有拉到指定电平是为什么?

    STM32L476 LCD外设SEG管脚奇数周期非活动状态没有拉到指定电平
    发表于 04-02 07:06

    STM32L476先用仿真器擦除FLASH后在程序中写不成功怎么解决?

    STM32L476写FLASH必须是64位(8字节)写,也就是double WORD,而且要先把要写的字节部分擦除掉。 问题来了,先把整片用仿真器擦除掉,程序中先定义一个64位的静态变量常数
    发表于 03-28 08:44

    stm32l476移植程序后,不执行的原因?怎么解决?

    stm32l476移植程序后,不执行。
    发表于 03-28 08:28

    STM32L476内部RC振荡器频偏超大的原因?怎么解决?

    量产几K台设备,出现一台STM32L476内部RC振荡器频率低了4.5%的故障板,引发高速串口通讯异常。 读了RCC_ICSCR寄存器,0x1090 0082,HSI时钟配置的是16M没有问题
    发表于 03-28 07:20

    STM32L476系统时钟72MHz,24分频后串口波特率为什么不是3M呢?

    STM32L476,使用内部HSI-16M时钟,串口波特率设置为3Mhz,实际测量出来波特率只有2.86MHz。 看手册,常温下内部HSI时钟频偏只有正负1%,出来的串口波特率看已经偏了4.67%了,理论上不应该有这么大的偏差吧?是芯片内部坏了吗?
    发表于 03-28 06:48

    STM32L476 shutdown模式,VCC掉电到1.2V时,RESET管脚被拉低了,为什么?

    STM32L476 shutdown模式,VCC掉电到1.2V时,RESET管脚被拉低了。但是手册不是说BOR0已经关闭了。怎么还会产生复位。
    发表于 03-21 08:15

    STM32L476RET6复位电路异常是什么原因?

    我用的CPU是STM32L476RET6,复位芯片是CAT811TTBI-GT3,目前电路用jlink不能下载程序,甚至有时候不能发现CPU,而用阻容复位电路是正常的,请问这是什么原因? 目前的复位电路如图所示 芯片部分
    发表于 03-20 06:10

    STM32L476利用双bank的方式进行升级,在flash中设置的一些flag读不到是什么问题?

    STM32L476利用双bank的方式进行升级,这个是通过Syscfg_Memrmp中的FB_Mode做的,我试了下,可以快速切换到另外一个bank,但是在flash中设置的一些flag读不到,是什么问题?
    发表于 03-12 07:43

    关于STM32L476 DFSDM时钟配置的疑问求解

    stm32l4 配置DFSDM 时钟只能来之 DFSDM_CHANNEL_OUTPUT_CLOCK_SYSTEM不能来自DFSDM_CHANNEL_OUTPUT_CLOCK_AUDIO cubemx 6.10.0
    发表于 03-08 06:26

    基于NUCLEO-L476RG的低功耗系统设计

    STM32L476 关键的功耗优化特性 (20分钟)• 任务1: 使用STM32CubeMX 建立一个基于NUCLEO-L476RG 板子的功耗测试工程 (15分钟)• 任务2: 使用CubeMX
    发表于 09-11 07:49