STM32外设DMA使用总结

发布者:老实巴交的大叔最新更新时间:2018-05-13 来源: eefocus关键字:STM32  外设DMA 手机看文章 扫描二维码
随时随地手机看文章

STM32外设DMA使用总结:

1、根据需要选择DAM模式:
(1)循环模式—DMA_Mode =  DMA_Mode_Circular
(2)正常模式—DMA_Mode =  DMA_Mode_Normal

2、对于DMA1的Chanel3,对应外设为USART3的RX
试想:如果串口接收中断和DAM中断同时打开,CPU如何相应?
(1)中断优先级不同:这好说,支持嵌套中断(NVIC)的Cortex-M3自然优先服务中断优先级高的
(2)中断优先级相同:处理原则,先来先处理;若同时到来,中断号低的优先处理
查询手册可知,DMA(IRQn number 13)会先于USART3(39)被CPU处理

3、设置DMA模式为循环模式,则:
(1)只开DMA中断,关闭外设中断,将只进一次DMA服务函数
(2)开启DMA中断,开启外设中断,才会循环进DMA服务函数

4、在开启多个DMA中断时,注意每个中断的优先级设置

5、在中断函数中,禁止DMA使能后要重新设置DMA传输数据量大小并开启DMA

void DMA1_Channel3_IRQHandler(void)  

{  

    if(DMA_GetITStatus(DMA1_FLAG_TC3))  

    {  

        DMA_ClearITPendingBit(DMA1_IT_GL3);  

        /* 处理数据期间关闭DMA,防止数据篡改 */  

        DMA_Cmd(DMA1_Channel3, DISABLE);      

          

        /* 处理数据 */  

          

        /* 重新设置DMA传输数据量大小并开启DMA */  

        DMA1_Channel3->CNDTR = DMA_CH3_RECV_BYTES;  

        DMA1_Channel3->CCR |= DMA_CCR3_EN;  

    }  

}  


6、DMA配置选项:


typedef struct  

{  

    /* 设置DMA传输的外设基地址,比如USART的DMA传输,基地址为(uint32_t)USART3-DR */  

    uint32_t DMA_PeripheralBaseAddr;   

    /* 设置DMA内存基地址,存放DMA传输数据的内存地址 */  

    uint32_t DMA_MemoryBaseAddr;  

    /* 操作的外设是源地(从外设取数据)、目的地(发送数据到外设) */  

    uint32_t DMA_DIR;                  

    /* 一次DMA传输数据量的大小 */  

    uint32_t DMA_BufferSize;   

    /* 外设地址是否自动递增,比如对于USART的DMA传输,外设地址是固定的 */  

    uint32_t DMA_PeripheralInc;   

    /* 同上,只不过针对的是内存地址 */  

    uint32_t DMA_MemoryInc;  

    /* 设置外设数据宽度,8bits/16bits/31bits */  

    uint32_t DMA_PeripheralDataSize;   

    /* 同上 */  

    uint32_t DMA_MemoryDataSize;   

    /* 选择DAM模式,循环模式还是正常模式 */  

    uint32_t DMA_Mode;  

    /* DMA通道的优先级,DMA_Priority_VeryHigh,DMA_Priority_High,DMA_Priority_Medium,DMA_Priority_Low  */  

    /* 如果开启多个DMA通道的话,记得设置合适的值 */  

    uint32_t DMA_Priority;  

    /* 设置DMA是否为Mem到Mem模式 */  

    uint32_t DMA_M2M;   

}DMA_InitTypeDef;  


关键字:STM32  外设DMA 引用地址:STM32外设DMA使用总结

上一篇:STM32通过DMA采集多通道AD
下一篇:STM32 双DAC DMA TIM6输出正弦波例子

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

STM32 使用SWD方式下载不了程序
下载不了程序往往有很多原因,有可能是keil没有设置好,也有可能是板子问题,我会将两种情况进行总结。 下载不了程序的童鞋,请耐心地看到最下面哦。 一、keil的设置 打开魔法棒,进行如下操作: 1)Device 选择对应的型号,如果没有则去官方下载相应的pack。比如我的板子是F407VE,选择如下。 2)Debug 选择对应的下载器,如J-LINK或ST-LINK。 3)点击Debug 下载器旁边的Settings ,如果下载器驱动是已安装的,并且STM32是正在供电的状态,则会显示: 如果没有显示上述红框内容,则说明很可能你的下载器驱动没有装好,此时则需要查看电脑的设备管理器,看看驱动的安装情况。 4)点击De
[单片机]
<font color='red'>STM32</font> 使用SWD方式下载不了程序
STM32学习笔记(四)---RCC
RCC: Reset Clock Control 复位和时钟控制器 RCC时钟框图—时钟树 系统时钟 对应的是图中黄色部分,下面的数字标号对应上面的红色标号1-6 1.HSE高速外部时钟信号 HSE是高速的外部时钟信号,可由有源晶振或无源晶振提供。 当使用有源晶振时,时钟从OSC_IN引脚进入,OSC_OUT引脚悬空。 当使用无源晶振时,时钟从OSC_IN和OSC_OUT进入,并且要配谐振电容。 注意:当HSE故障时候,不仅HSE会被关闭,PLL也会被关闭,此时高速的内部时钟信号HSI会作为备用的系统时钟,直到HSE回复正常,HSI=16M。 2.锁相环PLL PLL的主要作用是对时钟进行倍频,然后把时钟输
[单片机]
<font color='red'>STM32</font>学习笔记(四)---RCC
STM32 基础系列教程 9 – 串口通信
前言 学习stm32 usart串口的使用,学会用Printf() 函数打印信息。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如果还有不熟悉的可以查看之前的教程文档。下面直接介绍工程配置: 系统时钟树 USART1配置 引脚配置(保持默认即可) 引脚保持默认即可,当然实际应用中可以根据自己的需求对其进行重映射。 工程代码 在main.c 中加
[单片机]
<font color='red'>STM32</font> 基础系列教程 9 – 串口通信
基于STM32和SIM900A的无线通信模块设计
设计一个可以实现短信收发与数据无线传输的模块的要求,本文采用了ARM Cortex-M3内核的主流产品STM32作为主控芯片,采用SIMCom公司的SIM900A作为通信芯片。在查阅大量相关文献以及相关芯片的数据手册之后,本文设计了一个远程无线通信模块。该模块在实验室试运行一周后,没有出现掉线的情况,数据收发的速度也很快。该模块具有性能稳定,外形小巧,性价比高等优点。厂方投入使用之后,反应良好。 随着网络和现代通信技术的不断发展,远程无线通信技术经过多年的研究与实际应用,现如今在工业控制领域有了非常重要的地位,并且发挥着越来越大的作用。文中根据厂家的要求,设计的无线通信模块,主要实现了短信与数据收发功能,并且做到了模块的稳定,
[单片机]
基于<font color='red'>STM32</font>和SIM900A的无线通信模块设计
STM32学习之传感器篇——DHT11温湿度传感器
1、DHT11传感器简介 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。
[单片机]
<font color='red'>STM32</font>学习之传感器篇——DHT11温湿度传感器
基于STM32的四种波形发生器设计
(1) 可以实现四种波形:正弦波、方波、三角波、锯齿波; (2) 通过按键进行选择,频率可以调整; (3) LCD液晶显示; (4)设计出来之后用Proteus软件仿真出效果; 主要硬件设备:STM32F103单片机、DAC0832数模转换芯片、矩阵键盘、LCD12864液晶屏幕。 效果图 正弦波 方波 三角波 锯齿波 单片机源程序如下: #include stm32f10x.h #include sys.h #include delay.h #include 12864.h #include key4_4.h #include timer.h //LYF #define KE
[单片机]
基于<font color='red'>STM32</font>的四种波形发生器设计
STM32驱动DS1302
// 程序名: STM32驱动DS1302 //头文件 #include stm32f10x.h #include usart.h #define uchar unsigned char #define uint unsigned int ////DS1302引脚定义,可根据实际情况自行修改端口定义 #define RST PAout(5) #define IO PAout(6) #define SCK PAout(7) //DS1302地址定义 #define ds1302_sec_add 0x80 //秒数据地址 #define ds1302_min_add 0x82 //分数据地址 #define ds1302_hr_a
[单片机]
STM32和CAN总线在温度监控系统中的应用
     引言   现代工业控制领域通常要测量很多信号,将其转化为计算机可以识别的二进制信号,并利用计算机监视和记录各种测量的信号。这个过程就要涉及到信号的采集和处理。CAN总线是一种串行多主总线,它卓越的特性、极高的可靠性和独特的设计,特别适合工业过程监控设备的互连,因此,越来越受到工业界的重视,并已公认为最有前途的现场总线之一。本文介绍了基于STM32和CAN总线的温度监控系统的设计,通过上位机与下位机的通信,实现对温度数据的监控,并经初步实验达到了设计的要求。   1 系统总体方案概述   系统总体框图如图1所示,本系统采用主站+从站的结构,CAN主站主要实现温度数据的存储以及CAN总线协议和串口协议之间的桥接,
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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