你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
大家使用过STM32的DMA功能吗?感觉怎么样。
[复制链接]
lhb292
提问时间:2015-1-10 15:37 /
阅读主题, 点击返回1楼
赞
0
收藏
3
评论
97
分享
发布时间:2015-1-10 15:37
请先
登录
后回复
97个回答
yanhaijian
回答时间:2015-7-14 08:28:44
a1024a.1 32b0c
利用好DMA有时对程序的执行很关键。这就是为什么有的人写的程序执行起来比较流畅,有的人的程序执行起来比较顿挫。
赞
0
评论
回复
stary666
回答时间:2015-7-14 12:31:46
a1024a.1 32b0c
参考例程改就行
赞
0
评论
回复
jcx0324
回答时间:2015-7-14 12:44:06
a1024a.1 32b0c
在串口中应用很爽
赞
0
评论
回复
追寻V
回答时间:2015-7-19 22:27:07
a1024a.1 32b0c
经常用 不管怎样既然ST公司做了这个就是有 优点。
赞
0
评论
回复
yigerenday
回答时间:2015-7-20 13:29:32
a1024a.1 32b0c
先支持下
赞
0
评论
回复
yigerenday
回答时间:2015-7-20 13:29:49
a1024a.1 32b0c
还没用到,先支持下
赞
0
评论
回复
Brady
回答时间:2015-7-22 11:23:05
a1024a.1 32b0c
到现在还没完整做过一个量产的项目, 也是悲剧
赞
0
评论
回复
天下乌鸦一般黑
回答时间:2015-8-13 20:10:04
a1024a.1 32b0c
串口空闲中断+ dma双缓冲接收~非常效率。
赞
0
评论
回复
lhb292
回答时间:2015-8-19 17:22:56
a1024a.1 32b0c
天下乌鸦一般黑 发表于 2015-8-13 20:10
串口空闲中断+ dma双缓冲接收~非常效率。
终于来了一个仔细研究的朋友了。其实这个代码还有很多优点~~~~
赞
0
评论
回复
jtc_88
回答时间:2015-9-18 15:47:28
a1024a.1 32b0c
串口使用 很爽的,可以实现有限范围的不定长数据收发,一串数据一次接受完成,中断接受,或使用队列移出
赞
0
评论
回复
木木鱼
回答时间:2015-10-10 22:33:40
a1024a.1 32b0c
还没用到
赞
0
评论
回复
huiyiyfz
回答时间:2015-10-13 13:18:27
a1024a.1 32b0c
#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);
}
赞
0
评论
回复
auto46
回答时间:2015-10-14 08:31:18
a1024a.1 32b0c
一直在用,但没有RTOS
赞
0
评论
回复
disheng4688
回答时间:2015-10-16 11:17:08
a1024a.1 32b0c
生成PWM波时用过。
赞
0
评论
回复
peter001
回答时间:2015-10-16 11:55:53
a1024a.1 32b0c
主要用于adc
赞
0
评论
回复
1
2
3
4
5
6
7
/ 7 页
下一页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
终于来了一个仔细研究的朋友了。其实这个代码还有很多优点~~~~
#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);
}
一直在用,但没有RTOS