基于STM32L476芯片来做个演示

发布者:HeavenlyWonder最新更新时间:2024-03-26 来源: elecfans关键字:SPI  收发 手机看文章 扫描二维码
随时随地手机看文章

我们在做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可以到达的地方,编程设计前最好查看下相关芯片数据手册里的芯片模块及总线框架图。


关键字:SPI  收发 引用地址:基于STM32L476芯片来做个演示

上一篇:使用STM32实现云连接应用的资料概述
下一篇:如何在Linux下为STM32 MCU构建代码

推荐阅读最新更新时间:2024-11-11 17:42

RS-232收发器接口芯片SP3223E/3243E的原理及应用
1 概述 SP3223E/3243E是SIPEX公司生产的RS-232收发器,它支持EIA/TIA-232和ITU-T V.28/V.24通信协议,适用于便携式设备使用(如笔记本电脑及PDA)。SP3223E/3243E内有一个高效电荷泵,可在单+3.0V~+5.5V电源下产生±5.5V的RS-232电平,该技术已申请了美国专利(专利号为U.S.--5306954)。满负载时,SP3223E/3243E器件可工作于235kbps的数据传输率。3.3V时仅需0.1μF的电容。SP3223E是一个双驱动器/双接收器芯片,SP3243E则是一个三驱动器/五接收器芯片,是笔记本电脑或PDA的理想器件。SP3243E 包含一个总是处于激活
[嵌入式]
max7219控制8段数码管 spi接口
#include iom16v.h #define uint unsigned int #define uchar unsigned char #define CS_H PORTB|=(1 4) #define CS_L PORTB&=~(1 4) void SPI_MasterInit(void) { /* 设置MOSI 和SCK 为输出,其他为输入 */ DDRB = (1 4)|(1 5)|(1 7); /* 使能SPI 主机模式,设置时钟速率为fck/16 */ SPCR = (1 SPE)|(1 MSTR)|(1 SPR1)|(1 SPR0); } void SPI_MasterTran
[单片机]
max7219控制8段数码管 <font color='red'>spi</font>接口
基于CC1010芯片的微型无线数据收发模块的设计
引言无线射频传输主要应用于家庭自动化控制、工业系统控制、自动仪表检测系统、安防报警系统、计算机网络控制以及掌上PDA无线数据通信方面。CC1010是根据SmartRF技术,在0.35mm CMOS工艺下研制出的一种理想的超高频单片收发通信芯片。与以往RF芯片不同的是,CC1010内部集成了高性能的8051微处理器。它具有低电压、低功耗、高灵敏度、尺寸小等特点,与很少的一些外围器件搭配就可以设计成强大的具备无线通信能力的嵌入式系统。 CC1010芯片的功能结构和工作原理功能结构CC1010芯片主要有8051处理器、Flash编程DMA、数据加密模块、看门狗时钟、PWM、特殊功能寄存器、RF收发器等部分组成。工作原理CC1
[单片机]
STM32五个串口同时收发函数配置
#include user_usart.h #include stm32f10x_usart.h /*使用microLib的方法*/ /* int fputc(int ch, FILE *f) { USART_SendData(USART1, (uint8_t) ch); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} return ch; } int GetKey (void) { while (!(USART1- SR & USART_FLAG_RXNE)); return ((int)(USART1-
[单片机]
Maxim Integrated推出以太网光收发器IC
Maxim Integrated的SFP+光收发器模块总功耗低于0.8W,内置模拟监测器有效降低成本。 中国,北京,2014年3月11日。Maxim Integrated Products, Inc. (NASDAQ: MXIM)推出高集成度10GBASE-LR SFP+光收发器IC MAX3956,为工程师提供高性能、低功耗光模块方案。 光模块设计人员为了满足低功耗要求,常常在设计中不得不牺牲高性能。MAX3956 SFP+激光收发器IC能够很好地解决上述问题。该器件能够提供50%的传输模板裕量(1k波形,没有接触眼图模板边缘),SFP+模块总功耗低于0.8W。较低的功
[网络通信]
Maxim Integrated推出以太网光<font color='red'>收发</font>器IC
SPI , IIC, IIS, UART, 232,485 总结
IIC 有两根线, SCL , SDA, 主从设备都可用将控制线拉底。 数据线也要传片选地址。 是半双工总线,结构简单,总线上可以同时挂多个设备。 SPI是四根线,时钟,收,发,片选。有统一时钟控制,收发同时进行。速度可达 Mbps。 通过片选管脚选择设备,占用较多I/O,或需要外围锁存器或译码器选择从设备。 最常用的时钟设置基于时钟极性(CPOL)和时钟相位(CPHA)两个参数, cpol 定义时钟空闲电平, cpha决定在时钟前沿采样还是后沿采样。 IIS 是用与数字音频的总线 DATA, 用于串行数字音频数据。 LRCK, 左右声道开关 SCLK, 时钟,采样频率*采样位数*2,两个声道所以要乘2
[单片机]
如何采用STM32单片机实现SPI的驱动
前言:每学一个新知识,都会出现很多出错的情况,百度也查不出来,耗费很多时间,主要是不理解底层原理,没太多时间去理解,催得紧。SPI嘛,是人都知道干嘛用的,我一时半会也不知道怎么表达,百度最不缺的就是定义。缺的是实现过程,本少爷花了几十个积分搞了n多个实例,终于总结了要成功实现SPI要哪些奇葩的步骤。 正文: ---------------------------------------------配置SPI1的时钟------------------------------------ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE); //SPI1初始化 //RCC_APB
[单片机]
如何采用STM32单片机实现<font color='red'>SPI</font>的驱动
恩智浦推出业内首款汽车级隔离式CAN收发
中国上海,2013年5月3日-- 作为车载网络领域的领跑者,恩智浦半导体(纳斯达克股票代码:NXPI)推出了一款集成电隔离技术的高速CAN(控制器区域网络)收发器TJA1052i,这是同类产品中第一款符合ISO11898-2标准,且达到AEC_Q100汽车级标准的集成式隔离CAN收发器。 TJA1052i非常适合应用于需要高、低电压并存的CAN网络 (例如在电动车和混合动力车中)。为了确保安全,在这些应用中需要在CAN网络设计中加入电隔离器。TJA1052i集成了隔离器和CAN收发器,使之能大大简化高低电压之间的隔离设计工作。 TJA1052i提供电击、过压、地偏移和反向电流保护,并能显著提升嘈杂电磁环境下信号的完整性。 集成
[汽车电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved