如何使用STM32单片机实现DMA的同时发送和接收

发布者:TranquilMind最新更新时间:2024-05-13 来源: elecfans关键字:STM32  单片机  DMA  接收 手机看文章 扫描二维码
随时随地手机看文章

SPI通信中,可以同时开启发送和接收DMA请求,自动数据的发送和接收,完成数据的交换


基本步骤是:

1. 配置好SPI相应引脚功能

2. 配置和初始化SPI

3. 初始化DMA

4. 片选信号选择要通信的设备

5. 打开DMA


对应DMA通道:SPI1_RX---DMA1_Channel2;SPI1_TX---DMA1_Channel3

代码:

#define L3GD20_SPI_TDR (u32)(SPI1_BASE+0x0C)

#define L3GD20_SPI_RDR (u32)(SPI1_BASE+0x0C)

u8 SPI_TXBUFFER[7]={0xE8,0x00,0x00,0x00,0x00,0x00,0x00};

u8 SPI_RXBUFFER[7]={0};

void SPI_DMA_Test(void)

{

SPI_GPIO_Config();

SPI_Config();//见上一篇博客

SPI_DMA_Config();

GPIO_ResetBit(GPIOE,GPIO_Pin_3);//片选信号

//打开DMA

SPI_I2S_DMACmd(SPI1, SPI_I2S_DMAReq_Rx, ENABLE);

SPI_I2S_DMACmd(SPI1, SPI_I2S_DMAReq_Tx, ENABLE);

DMA_Cmd(DMA1_Channel2, ENABLE);

DMA_Cmd(DMA1_Channel3, ENABLE);

}

void SPI_DMA_Config(void)

{

DMA_InitTypeDef DMA_InitStruct;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

DMA_StructInit(&DMA_InitStruct);

DMA_DeInit(DMA1_Channel2);

DMA_DeInit(DMA1_Channel3);

DMA_InitStruct.DMA_PeripheralBaseAddr = L3GD20_SPI_TDR;

DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t )SPI_TXBUFFER;

DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST;

DMA_InitStruct.DMA_BufferSize =7;

DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;

DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;

DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;

DMA_InitStruct.DMA_Priority = DMA_Priority_VeryHigh;

DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;

DMA_Init(DMA1_Channel3, &DMA_InitStruct);

DMA_InitStruct.DMA_PeripheralBaseAddr = L3GD20_SPI_RDR;

DMA_InitStruct.DMA_MemoryBaseAddr = (uint32_t )SPI_RXBUFFER;

DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralSRC;

DMA_Init(DMA1_Channel2, &DMA_InitStruct);

}


处理数据时只需要读取缓冲区的数据即可,不需要额外的程序去读取,节省资源,用起来方便。


关键字:STM32  单片机  DMA  接收 引用地址:如何使用STM32单片机实现DMA的同时发送和接收

上一篇:一文读懂STM32f030c8t6单片机ADC模拟看门狗的使用
下一篇:STM32单片机的断言机制函数assert_param解析

推荐阅读最新更新时间:2024-11-08 11:40

51单片机(STC89C52)的中断和定时器
STC89C51/STC89C52 Timer 内部不带振荡源, 必须外接晶振 采用11.0592MHz,或22.1184MHz,可方便得到串口通讯的标准时钟. STC89和STC90系列为12T, STC11/STC12系列为1T, 也就是一个指令一个机器周期, 这些都需要外置晶振; STC15系列有内置晶振. 中断 中断允许控制寄存器 IE 字节地址A8H, CPU对中断系统所有中断以及某个中断源的开放和屏蔽是由中断允许寄存器IE控制的 EA (IE.7): 整体中断允许位, 1:允许 ET2(IE.5): T2中断允许位, 1:允许(for C52) ES (IE.4): 串口中断允许位, 1:允许 ET1(IE.3
[单片机]
51<font color='red'>单片机</font>(STC89C52)的中断和定时器
瑞萨电子RA MCU集成micro-ROS框架,简化专业机器人开发
  与eProsima携手,推动机器人技术在工业和领域的应用,EK-RA6M5评估现已成为cro-ROS官方支持开发板。   2021 年 9 月 2 日,日本东京和西班牙马德里讯 - 全球解决方案供应商瑞萨集团(TSE:6723)与专注于中间件解决方案的SMEeProsima,今日宣布,基于RA 的EK-RA6M5评估套件成为micro-ROS开发框架(适用于MCU的机器人操作系统)的官方支持硬件平台。瑞萨与micro-ROS框架的主要开发商eProsima携手,将micro-ROS移植到RA MCU中。     micro-ROS框架允许MCU在机器人操作系统(ROS)2数据空间中进行标准化集成,为嵌入式系
[机器人]
基于低功耗单片机的智能综合仪表设计
1 引言 现在,世界正从工业化、机械化时代迈入信息化时代。仪器仪表作为一种信息工具,起着不可或缺的信息源的作用。由于信息源必须准确无误或最大限度的少误,所以现代仪器仪表都无不采用多种技术形式综合集成,在高新技术发展的信息化时代,仪器仪表完全是现代化的综合因素之一。 本文所设计的基于低功耗单片机的智能综合仪表是基于智能化、数字化、网络化新一代智能仪表的设计理念,采用智能调理、灵巧总线、工业网络、液晶显示、电子储存技术,综合指示仪表、调节仪表、积算仪表与记录仪表功能,具有高测量控制精度、高可靠性稳定性的特点。采用高亮度LED背光192×64单色点阵液晶显示屏,支持2通道通用模拟输入、1通道模拟输出和2通道的报警输出。本文具体论述了
[单片机]
基于低功耗<font color='red'>单片机</font>的智能综合仪表设计
Cortex-M4内核微处理器DMA方式的高速A/D采样
1 MK60N512VMD100微处理器简介 MK60N512VMD100芯片是基于Cortex-M4内核的典型芯片,是飞思卡尔Kinetis系列中集成度最高的芯片。Cortex-M4内核是在Cortex-M3内核的基础上发展起来的,其性能比Cortex-M3提高了20%。Cortex-M4在Cortex-M3的基础上强化了运算能力,增加了浮点运算控制器、DSP和并行计算等。MK60N512VMD100具有丰富的通信接口,主频高达100MHz,32路DMA供外设和存储器使用,大大提高了CPU利用率,具有33路单路和4路差分的16位A/D转换器、2路12位D/A转换器等外设。 2 MK60N512VMD100芯片DMA和ADC介
[单片机]
Cortex-M4内核微处理器<font color='red'>DMA</font>方式的高速A/D采样
单片机12864 c程序
单片机12864 c程序-MSP430与12864连接驱动程序(KS0108) #i nclude MSP430x14x.h // Standard EquaTIons #i nclude math.h #i nclude stdlib.h #i nclude stdio.h #i nclude string.h #i nclude ctype.h #i nclude HZTable.h #i nclude ASCII816.h #define uint unsigned int #define uchar unsigned char //**********************************************
[单片机]
智能型静止进相器中单片机的系统设计
在传统的可控硅整流装置中,其触发电路大都以电压方法调节导通角α角度,对以分离元件及专用集成电路为主的触发电路,这种方法较易实现,但这种触发器的性能却不尽人意,如电路复杂、调试难度大、脉冲均匀度不好等。为改善以上问题,采用单片机来实现。本系统中,采用ATMEL公司生产的 简装形单片机AT89C2051来实现。 一.AT89C2051单片机介绍 89C2051主要特点是采用Flash存储器技术,降低了制造成本,其软件、硬件与MCS-51完全兼容。89C2051片内含有2K字节的 Flash程序存储器,128字节的片内RAM。允许工作的时钟为0—24MHz。89C2051不允许构造外部总线来扩充程序/数据存储器,所以它不需要ALE、
[单片机]
智能型静止进相器中<font color='red'>单片机</font>的系统设计
基于AVR单片机的嵌入式“瘦服务器”系统设计思想
1 引 言 21世纪,计算机的发展进入了一个充满机遇的阶段——后PC时代。继PC机之后, 形式多样的数字化产品已经开始成为信息处理的一大主要工具,并且正在逐步形成一个充满商机的巨大产业。后PC时代的到来,使得人们开始越来越多地接触到一个新的概念——嵌入式产品。像手机、PDA(如商务通)等均属于手持的嵌入式产品,VCD机、机顶盒等也属于嵌入式产品,而像车载GPS系统、数控机床、网络冰箱等同样都采用嵌入式系统。形式多样的数字化设备正努力把Internet连接到人们生活的各个角落,这意味着,中国数字化设备的潜在消费者数量将以亿为单位。嵌入式瘦服务器是嵌入式Internet时代的关键和核心技术之一,如果说PC机的发展带动了整个桌面系统
[单片机]
基于AVR<font color='red'>单片机</font>的嵌入式“瘦服务器”系统设计思想
基于GD32 MCU的电机驱动方案详解
兆易创新 GD32 MCU 在电机驱动应用上,经过多年技术沉淀,在无刷电机和步进电机的应用中,形成自身完整可靠的解决方案,愿能为用户提供更多的服务。 社会发展日新月异,我们的生活和工作越来越智能化,智能牙刷,扫地机器人,无人机等已经日常化使用,机械自动化也作为工业 IOT 的一个重要组成部分,其中我们可以看到电机的使用已经是一个共同的焦点应用。 作为工程师的我们,总是在我们的产品上进行深度思考,如何实现社会用户的使用需求。 需要什么类型电机 电机的功率,电压,电流参数要求 电机的速度,位置,转矩,精度 电机驱动算法 ZLG 具有一支资深的专业电机控制算法解决团队,为您做了如下分类,您可根据切身应用作以对比验证。 ZLG
[单片机]
基于GD32 <font color='red'>MCU</font>的电机驱动方案详解
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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