STM32中DMA实现方式

发布者:Yinyue1314最新更新时间:2015-09-30 来源: eefocus关键字:STM32  DMA  实现方式 手机看文章 扫描二维码
随时随地手机看文章
  STM32系列微控制器均含有DMA和通用时钟TIMx模块。其低端型号中仅包含DMA1,支持7个通道;高端型号还包括DMA2,支持5个通道。它的每个通道可任意指定工作模式,如内存到内存、内存到外设或外设到内存等。当涉及到外设时,一般是由外设来触发DMA的一次传输,如串口收到数据的标志位可触发DMA。
  DMA的每次传输都分为4个阶段:申请仲裁、地址计算、总线存取和应答。除总线存取阶段,其他3个阶段都只需要一个系统周期,并且不占用总线,可在DMA控制器内部并发地执行。总线存取阶段,每个字(4字节)的传输需要3个系统周期。DMA和CPU工作在交替方式下,不会相互阻塞。DMA各个通道可独立设置优先级,当访问同一资源时高优先级通道先获得资源。
  采用时钟的4个比较/捕获通道加DMA可以产生出4路不同频率和占空比的方波。这里为简化篇幅,只列出了产生一路方波的代码。基本原理是:将时钟的4个通道设置为反转模式(即计数器与比较捕获寄存器相等时,其对应的CPU引脚电平发生反转),设置计数器为向上计数到0xFFFF的模式;然后预先计算好需要引脚反转的时刻,并使能对应通道的DMA请求。这样,当计数器与比较/捕获寄存器的值相等时,由DMA将下一个需要引脚电平反转的时刻送入到比较/捕获寄存器。
  这里将DMA设置为从内存到外设的半字(2个字节)环形传输。开启DMA全满和半满中断,在中断处理函数中不断填充新的时刻值,即可保证产生的波形不间断。假设存放时刻值的缓冲长度为N,则每N/2个点才中断一次,这样CPU就不需要频繁进入中断,执行效率比较高。由此也可以看出,缓冲越大,对中断响应的实时性要求也越低,当然这时中断的处理时间也越长。以下为示例代码:
  需要注意的是,比较/捕获寄存器的预加载功能必须禁止掉。我们需要的是写入比较/捕获寄存器的值立即与计数器相比较输出,而无需等待一个更新事件。
  采用DMA+TIMx的方式来捕获上升沿和下降沿时刻,有利于提高系统的实时性和执行效率。通过TIMx的捕获功能将方波的电平跳变时刻记录在比较/捕获寄存器中,然后DMA将该值自动传输到内存,只有当DMA触发半满或全满事件时CPU才需要进入中断处理数据。通过记录方波的上升沿和下降沿时刻,然后将两个时刻相减,进而就能得到所有低沿和高沿的宽度,最后进行后续的分析处理。这种方式下中断频率仅为方波频率的4/N(N为缓冲区大小)。
  测试中STM32系列微控制器工作在36 MHz,可产生出1路最高1.5 MHz的方波,可捕获1 MHz的方波,而此时CPU的执行几乎不受影响。这里采用DMA来实现方波的产生和捕获,极大地提高了系统的实时性和执行效率,减少了中断次数,节省了宝贵的资源。这种方案也可以用来实现高效的模拟串口。另外,若有多个DMA同时工作,应考虑最坏情况下DMA的响应时间,以避免错误发生。
关键字:STM32  DMA  实现方式 引用地址:STM32中DMA实现方式

上一篇:STM32串口中断接收方式详细比较
下一篇:移植u-boot 1.1.6到TQ2440开发板-第一阶段

推荐阅读最新更新时间:2024-03-16 14:33

STM32驱动74hc595
#include bsp_74HC595.h #define HC595_DS PCout(13)// #define HC595_OE PAout(0)// #define HC595_ST_CP        PBout(9)// #define HC595_SH_CP PBout(8)// static void HC595_Delay(u32 t) { u32 i; while(t--) for (i = 0; i 1; i++); } void HC595_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_
[单片机]
stm32 IAP 实现
在对STM32存储器结构及相关知识了解后,我们就可以进行IAP的设计了。 在上一篇笔记中,进行了一个简单的IAP程序结构,以及和User App程序的相互联系的系统设计。 本篇对IAP实现的细节进行了较为详细的论述,包括源码结构的设计;我们从上位机(PC C#)和下位机(MCU C)共同描述IAP功能的实现过程。 1 STM32的IAP实现平台 IAP功能的实现需要两个方面(上位机和STM32上的IAP程序)的密切合作。因此,我们除了需要知道STM32芯片上的IAP程序结构,我们还需要了解上位机的程序结构,这样才能使上位机和STM32很好的相互工作。 下位机(指的是STM32构成的单片机系统): 本下位机系统使用C语言
[单片机]
<font color='red'>stm32</font> IAP <font color='red'>实现</font>
stm32笔记:Systick系统滴答定时器
Systick :系统心跳定时器,提供系统节拍 裸机程序中可作为独立的延时定时器 用途: 1.产生操作系统的时钟节拍 2.便于不同处理器之间程序移植 SysTick定时器被捆绑在NVIC中,异常号15 3.作为一个闹铃测量时间用于测量时间, 但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作 它有四个寄存器 STK_CSR, 0xE000E010 -- 控制寄存器 STK_LOAD, 0xE000E014 -- 重载寄存器 STK_VAL, 0xE000E018 -- 当前值寄存器 STK_CALRB, 0xE000E01C -- 校准值寄存器 stm32的时钟源 选择外部时钟源时,则Sy
[单片机]
<font color='red'>stm32</font>笔记:Systick系统滴答定时器
STM32 Systick 编程及应用
提到systick 不得不抱怨以下STM32 的用户手册,既然提供了systick 的功能,为啥手册里却只提了一下?后来笔者上网搜的时候,才发现,抱怨的不仅仅是我一个人。闲话不说,下面将笔者搜集的资料进行总结。 一、 systick介绍 Systick 就是一个定时器而已,只是它放在了NVIC 中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。没有学过操作系统的同学, 可能会很郁闷,啥叫滴答中断?这里来简单地解释一下:操作系统进行运转的时候,也会有 心跳 。它会根据 心跳 的节拍来工作,把整个时间段分成很多小小的时间片,每个任务每次只能运行一个 时间片 的时间长度就得退出给别的任务运行,这样可以确保任何一
[单片机]
STM32F103和STM32F401的ADC多通道采集DMA输出
使用STM32F103和STM32F401CCU6对双轴摇杆(两个电压通道)进行ADC采样并通过DMA读取数值 STM32 ADC(模数转换)工作模式 单次转换模式 In Single Conversion mode, the ADC does one conversion. This mode is started either by setting the ADON bit in the ADC_CR2 register (for a regular channel only) or by an external trigger (for a regular or injected channel), while the
[单片机]
stm32 备份寄存器 读写数据
1. 首先 检查RTC电池是否装载,没电池的话,设备掉电也保存不了数据。 备份寄存器就是普通的RAM,需要配合外接电池使用,如果没有电池,就不能掉电保持数据。 因为是普通RAM,所以不存在写入次数的问题,理论上是无限次的。 其次在RCC_Configuration(); 中配置备份寄存器的如下: /* Enable PWR(电源控制) and BKP clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); /* Enable write access to Backup domain */ PWR_Ba
[单片机]
基于STM32的家庭服务机器人系统设计
引言   随着人工智能和传感器技术的发展,机器人已从工厂的结构化环境进入人们的日常生活环境,机器人不仅能自主完成工作,还能与人共同协作完成任务或在人的指导下完成任务 。家庭服务机器人是智能家居系统 的一个重要组成部分,在生活中的作用越来越重要。当前,大部分的家庭服务机器人不具备行走功能或只具有简单的避障能力,机器人的研究很多依赖于仿真实现,但是现实情况和仿真结果可能大相径庭。也有一些研究将问题复杂化,反而走了更多的弯路。   针对当前家庭服务机器人的不足和现代智能服务机器人的要求,本文提出一种基于STM32的家庭服务机器人系统的设计方案。该方案模拟智能家居环境,简化了定位方式,有效地利用了ZigBee技术低成本、低功耗的特点
[安防电子]
基于<font color='red'>STM32</font>的家庭服务机器人系统设计
STM32 PB2(BOOT1)使用注意
由于STM32 PB2脚是复用引脚,而且该复用功能是用于启动选择,使用时就要小心了 ------------------------------------------------------------------------- BOOT1 BOOT0 启动模式 说明 X 0 用户闪存存储器 用户闪存存储器被选为启动区域 0 1 系统存储器 系统存储器被选为启动区域(进入ISP模式) 1 1 内嵌SRAM 内嵌SRAM被选为启动区域 ------------------------------------------------------------------
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved