你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
终于来了一个仔细研究的朋友了。其实这个代码还有很多优点~~~~
#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