STM32 DMA 自我学习 简单总结

发布者:EnchantedMagic最新更新时间:2021-10-14 来源: eefocus关键字:STM32  DMA  配置说明 手机看文章 扫描二维码
随时随地手机看文章

简单记录一下STM32的DMA的配置说明--------


根据野火的串口的DMA程序,自己简单理解说明-----


----第一部分----DMA配置-----


void USART1_DMA_Config(void)

{

DMA_InitTypeDef DMA_InitStructure;


RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);  //时钟


DMA_InitStructure.DMA_PeripheralBaseAddr = USART1_DR_Base;    //设置DMA源:串口数据寄存器地址----基地址----如果后面打开了地址自增---则会传输连续一组数据  

DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SendBuff;   //内存地址(要传输的变量的指针)---也就是DMA传输的源地址

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //方向:外设是目的地----如果是--DMA_DIR_PeripheralSRC---则是外设作为数据传输的来源

DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;  //DMA要传输的总数据大小   

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外设地址不增---外设地址不自增---表示从一个固定地址传输或者接收数据----反之则为一个递增地址

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //内存地址自增---内存地址不自增---也表示从一个固定地址传输或者接收数据----反之则为一个递增地址

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //外设数据单位---分别有8位---字---DMA_PeripheralDataSize_Byte。半字---DMA_PeripheralDataSize_HalfWord。字----DMA_PeripheralDataSize_Word---

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;  //内存数据单位 8bit---分别有8位---字---DMA_MemoryDataSize_Byte。半字---DMA_MemoryDataSize_HalfWord。字----DMA_MemoryDataSize_Word--- 

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;   //DMA模式:不断循环 ----另一种模式--循环---DMA_Mode_Normal

DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;    //优先级:中-----分别有----最高优先级---DMA_Priority_VeryHigh。高优先级---DMA_Priority_High。中优先级---DMA_Priority_Medium。低优先级---DMA_Priority_Low。

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;   //禁止内存到内存的传输   


DMA_Init(DMA1_Channel4, &DMA_InitStructure);  //配置DMA1的4通道---对应USART1_TX。还有很多相应已经确定好的通道----见下面截图----截图01    

DMA_Cmd (DMA1_Channel4,ENABLE);  //使能DMA


 //DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);  //配置DMA发送完成后产生中断----这个是根据需要来确定是否需要中断---比如你需要确定DMA什么时候完成传输----传输完成后你需要做一些什么的时候。但是如果配置了使用完成中断,则需要在后面配置其作为中断的优先级。

}


---第二部分---如果前面打开了DMA中断,这里需要配置其中断优先级----


static void NVIC_Configuration(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

  

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  

  NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn;  //主要是这里的对应DMA通道

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

}

---第三部分---如果前面打开了DMA中断,这里需要设置其中断函数----

void DMA1_Channel4_IRQHandler(void)


{


  if(DMA_GetFlagStatus(DMA1_FLAG_TC4)==SET)  //DMA发送完成标志----其它标志位见截图02---和截图03--


  {


    ..............


    DMA_ClearFlag(DMA1_FLAG_TC4);  //清除发送完成标志---以便下次判断


  }


}


----------------------------------------截图------------------------------


--------------截图01---------------

----------------------截图02-------------------------

--------------------------------截图03-----------------------

关键字:STM32  DMA  配置说明 引用地址:STM32 DMA 自我学习 简单总结

上一篇:STM32 GPIO 简单操作函数
下一篇:STM32 中断配置 自我学习总结

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

STM32 学习笔记 一.矩阵键盘
刚刚接触STM32,感觉和arduino完全是两个难度,如果说arduino是乐高积木,那我感觉STM32就跟盖楼一样,哈哈,是真的难,真的极具挑战性,可能是我刚开始学觉得难,到后面熟练了应该会好一些,言归正传,就讲一讲我们学长给我们下的任务矩阵键盘。 学长学姐们做的是九键的矩阵键盘,我们做的是四键的,难度其实相差不大,换汤不换药的类型,原理就是一二号线通高电平,三四号线低电平,然后交换,让一二号低电平,三四号高电平这样就可以确定是哪个按键被按下。 OK上代码 key.c函数 #include key.h #include delay.h #include usart.h void KEY_Init1(void)
[单片机]
<font color='red'>STM32</font> 学习笔记 一.矩阵键盘
STM32学习1:GPIO输出实验——点亮三色LED
一、概述: 1、发光二极管简介 发光二极管是半导体二极管的一种,可以把电能转化为光能,常简写为LED。常用的是发红光、绿光或黄光的二极管。发光二极管的反向击穿电压约为5V。它的正向伏安特性曲线很陡,使用时必须串联限流电阻以控制通过管子的电流。限流电阻R可用下式计算: R = (E - UF)/IF 式中E为电源电压,UF为LED的正向压降,IF为LED的一般工作电流。LED广泛应用于各种电子电路、家电、仪表等设备中,做电源或电平指示。 2、STM32 GPIO简介 STM32F4每组通用I/O 端口包括4 个32 位配置寄存器(MODER、OTYPER、OSPEEDR 和PUPDR)、2 个32 位数据寄存
[单片机]
<font color='red'>STM32</font>学习1:GPIO输出实验——点亮三色LED
keil5配置stm32库函数开发
在将模板文件添加到工程中后,      1、点击魔术棒,选择C/C++,添加头文件的路径;    2、C/C++里面的define内填入:STM32F10X_MD,USE_STDPERIPH_DRIVER; 3、Output-- select。。选择Output文件夹(为了好看) 根目录:   
[单片机]
keil5<font color='red'>配置</font><font color='red'>stm32</font>库函数开发
MSP430程序库<十四>DMA程序库
直接存储器存取(DMADirect Memory Access)方式是用硬件实现存储器与存储器之间或存储器与IO设备之间直接进行高速数据传送,不需要CPU的干预。这种方式通常用来传送数据块。MSP430f16x系列单片机内部含有DMA模块,而且几乎内部所有外设都可以触发DMA开始存取数据。这里实现了这个模块的程序通用的函数库,方便使用。 硬件介绍: MSP430F15X/16X 系列单片机具有DMA 控制器,从而能够为数据高速传输提供保证。例如,通过DMA控制器可以直接将ADC 转换存贮器的内容传到RAM 单元。 MSP430系列单片机扩展的DMA具有来之所有外设的触发器,不需要CPU的干预即可提供先进的可配置的数据传输能
[单片机]
MSP430程序库<十四><font color='red'>DMA</font>程序库
STM32CUBEIDE配置FreeRTOS
环境:STM32CUBEIDE 版本1.02 STM32103C8T6最小系统板 F1,1.8.0 版本固件包 新建工程,选择芯片,不多做赘述 RCC中选择时钟源为 Crytal/Ceramic Resonator SYS 中Debug 选择为 serial Write,这很重要,若选择NO debug 则在烧写一次程序后,芯片会锁住变砖。若不小心变砖了,参考这篇文章入口。 SYS 中 Timebase 不能选择为 systick ,因为FreeRTOS 会使用systick 作为时钟节拍。为了不冲突,HAL库的时基选用别的。 Middleware中选择 FreeRTOS,在interface 中选择 CMSI
[单片机]
STM32总结一 STM32三种点亮LED灯方式的不同之处
STM32点亮LED灯有很多种方法。第一种是操作寄存器来点亮LED灯,(以GPIOC的第一个LED为例)操作的方法是首先在中文手册,首先要声明的是,手册里面看到的地址,都是字节,表示第多少多少个字节,然后这个数字对应一个字节位,所以每一个32位的寄存器占四个字节,找到block2(这个是外设区,所有的外设地址都在这个区)的基地址,然后加上第一段偏移地址,就越过APB1总线的内存区,到达了APB2总线这个区的基地址。然后再加上相对于APB2的偏移地址就可以定位出某个特定外设的基地址,这里所指的是GPIOC端口的基地址,然后再在这个端口外设基地址的基础上,加上相应的偏移地址,就可以定义出这个端口的寄存器地址,这些寄存器是紧紧的挨着的,
[单片机]
<font color='red'>STM32</font>总结一 <font color='red'>STM32</font>三种点亮LED灯方式的不同之处
STM32的ADC的采样时间及模拟信号的最大带宽
请看STM32技术参考手册的16.2节,和STM32F103xx数据手册的5.3.17节表44。可以在ST的中文网站下载到上述2个手册: http://www.stmicroelectronics.com.cn/stonline/mcu/MCU_Pages.htm 前面所说“STM32的ADC的采样及转换时间最小为1us”,实际上STM32的ADC采样及转换时间可以通过程序编程进行调整,共有8种选择,按 ADC模块的驱动时钟算分别为: 1.5 ADC时钟周期 7.5 ADC时钟周期 13.5 ADC时钟周期 28.5 ADC时钟周期 41.5 ADC时钟周期 55.5 ADC时钟周期 71.5 ADC时钟周期 239.5 ADC
[单片机]

推荐帖子

AD835使用问题
本帖最后由paulhyde于2014-9-1503:34编辑距离竞赛的日子越来越近了,最近也一直在准备着,也遇到了一些问题。其中一些解决了,但是有一个问题一直都困扰着,一直都没得到解决。问题是这样的:最近选了一道竞赛训练题,是05年的简易频谱分析仪,采用的方案是外差法,其中遇到最大的问题是混频器不给力,我采用的是模拟乘法器AD835,理论上是没什么问题,但是测试结果很让人失望,看看下面的结果吧,1M和1.01M的信号可以混出个2.01M的和频信号和0.1M的差频信号,经过低通
wgdit 电子竞赛
MSP430Ware学习笔记 UART SMCLK 115200-8-N-1
1.初始化UART0之前需要先初始化ACLK、SMCLK和MCLK。示例代码中使用XT1,ACLK为32768,SMCLK和MCLK约为8MHZ。2.UART的时钟可以参考ACLK或者SMCLK,本例参考SMCLK。波特率提高至1152003.MSP430波特率的产生有两种模式,低频波特率产生和过采样波特率产生。代码中使用过采样波特率产生。其实,两种模式可以达到相似的效果。4.代码的开头调用了stdio,在函数中宏重写了putchar函数,定向到UART单字节输出。
qinkaiabc 微控制器 MCU
如何去掉开发板口串口反馈信息
如何去掉开发板s3c2410的串口自动反馈信息?比如说,把开发板和pc连在一起,打开pc上的串口软件,再打开开发板上(wince5.0系统)的串口软件就会在pc上串口软件上收到一些信息,每当板子接收到数据时,pc上的串口软件就会收到类似+SLGetStatus0x1270这样的信息,请问如何能不让开发板在收到数据进自动反馈信息?因为我们最后是要把开发板和一个读卡器想连的,用开发板上的串口软件向读卡器里发送十六进制的命令,每个命令分两次发送,其间串口软件会收到读卡器的信息,但是如果发生
dhu2060427 嵌入式系统
手机上网时网页的内容走不走com口?
我用GPRS的modem上网,当握手成功后,本想监测modem串口的信息,但是写在读串口的调试信息没有任何反应(确认调试语句无误且生效),请问网页的内容是否被modem发到串口呢??又能否被读到呢??网页的内容又是如何显示在ie中的呢??如果想监测流量,又如何计算检测呢??手机上网时网页的内容走不走com口?自顶!!!解决另加分!GPRS的modem上网,当握手成功后:这时的串口应该被modem占用了吧,你还能打开?lz要干嘛?当然走串口,你用监控软件看看就知道了,如果你写
yinfei0809 嵌入式系统
求助:地线断开,输出为零》
请问各位大侠,我现在有个问题:我有个正负12V电源供电传感器,还有一根地线和一根信号线,要求当断开电源线,地线其中的任何一根时要求输出为小于等于零,怎么做呢?大家有什么方案,讨论一下啦?求助:地线断开,输出为零》没看明白什么意思回复:求助:地线断开,输出为零》可能说得不是很清楚,意思是:一个传感器,有四根线用于连接外面器件,两根正负12V电源线,一根地线,一根信号输出线;现在要求设计出,电源线或者地线中的任何一根开路,信号线输出要为小于等于0V。注:当四根线都正常接好时,信号输出为+1
guangdingli 模拟电子
出一台闲置的100w短波功放,性能强大
小蛋挞PA100短波功放,最大输出功率100瓦,做工都唔错。支持KN-Q10、KN850、KN990、协谷G90S等QRP电台。可以走闲鱼交易出一台闲置的100w短波功放,性能强大价格499RMB多少频率范围 3-30mhz顶一顶顶一顶
Stephenhu1984 淘e淘
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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