你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

大家使用过STM32的DMA功能吗?感觉怎么样。  

[复制链接]
lhb292 提问时间:2015-1-10 15:37 /
阅读主题, 点击返回1楼
收藏 3 评论97 发布时间:2015-1-10 15:37
97个回答
yanhaijian 回答时间:2015-7-14 08:28:44
利用好DMA有时对程序的执行很关键。这就是为什么有的人写的程序执行起来比较流畅,有的人的程序执行起来比较顿挫。
stary666 回答时间:2015-7-14 12:31:46
参考例程改就行
jcx0324 回答时间:2015-7-14 12:44:06
在串口中应用很爽
追寻V 回答时间:2015-7-19 22:27:07
经常用 不管怎样既然ST公司做了这个就是有 优点。
yigerenday 回答时间:2015-7-20 13:29:32
先支持下
yigerenday 回答时间:2015-7-20 13:29:49
还没用到,先支持下
Brady 回答时间:2015-7-22 11:23:05
到现在还没完整做过一个量产的项目, 也是悲剧
天下乌鸦一般黑 回答时间:2015-8-13 20:10:04
串口空闲中断+ dma双缓冲接收~非常效率。
lhb292 回答时间:2015-8-19 17:22:56
天下乌鸦一般黑 发表于 2015-8-13 20:10
串口空闲中断+ dma双缓冲接收~非常效率。

终于来了一个仔细研究的朋友了。其实这个代码还有很多优点~~~~
jtc_88 回答时间:2015-9-18 15:47:28
串口使用 很爽的,可以实现有限范围的不定长数据收发,一串数据一次接受完成,中断接受,或使用队列移出
木木鱼 回答时间:2015-10-10 22:33:40
还没用到
huiyiyfz 回答时间:2015-10-13 13:18:27
#include "DMA.h"
#include "LED.h"
void MYDMA_Config(uint32_t par,uint32_t mar,uint16_t data)//配置DMAx_CHx
{        DMA_InitTypeDef DMA_InitStructure;
       
        NVIC_DMA();                //配置DMA中断
       
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
       
        DMA_InitStructure.DMA_BufferSize=data;                //数据传输量
       
        DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;                //传输方向从内存到外设
        DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;                //禁止内存到内存传输
       
        DMA_InitStructure.DMA_MemoryBaseAddr=mar;                ////DMA 存储器地址
        DMA_InitStructure.DMA_PeripheralBaseAddr=par;                        //DMA外设地址
       
        DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;                //外设地址不增
        DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;                //内存地址自增       
       
        DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;                //外设数据单位
        DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;                //内存数据为8位
       
        DMA_InitStructure.DMA_Priority=DMA_Priority_Medium;                //优先级中等
        DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;                //普通模式

        DMA_Init(DMA1_Channel7,&DMA_InitStructure);

        DMA_Cmd(DMA1_Channel7,ENABLE);
       
        DMA_ITConfig(DMA1_Channel7,DMA_IT_TC,ENABLE);
}

void NVIC_DMA()
{        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel7_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
        NVIC_Init(&NVIC_InitStructure);
}
void DMA1_Channel7_IRQHandler()
{        if(DMA_GetFlagStatus(DMA1_FLAG_TC7)==SET)
        {        GPIO_ResetBits(GPIOA,GPIO_Pin_5);
        }       
        DMA_ClearFlag(DMA1_FLAG_TC7);

}


int main()
{        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        MyUSART2_Init();
        LedInit();
       
                j=sizeof(table);       
                for(i=0;i<SEND_BUF_SIZE;i++)
                {        SendBuff[i]=0xff;       
        //                if(i>=j)
                //        {        SendBuff[i]=0x0a;
        //                        break;
                //}
                }
                MYDMA_Config((uint32_t)&USART2->TDR,(uint32_t)SendBuff,SEND_BUF_SIZE);//外设为串口1,存储器为SendBuff,长度为:SEND_BUF_SIZE.
                USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE);
                GPIO_SetBits(GPIOA,GPIO_Pin_5);
                                       
                while(1);     
       
}
auto46 回答时间:2015-10-14 08:31:18

一直在用,但没有RTOS
disheng4688 回答时间:2015-10-16 11:17:08
生成PWM波时用过。


peter001 回答时间:2015-10-16 11:55:53
主要用于adc

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版