OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4742|回复: 3

ADC实验用DMA来传输数据并发送到串口上

[复制链接]

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2014-8-5
在线时间
13 小时
发表于 2014-9-7 22:00:27 | 显示全部楼层 |阅读模式
5金钱
dma.DMA_BufferSize = 1;
dma.DMA_DIR = DMA_DIR_PeripheralSRC ;
dma.DMA_M2M = DMA_M2M_Disable;
dma.DMA_MemoryBaseAddr =(u32)&ADC_ConvteredValue;
dma.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord ;
dma.DMA_MemoryInc =DMA_MemoryInc_Disable;
dma.DMA_Mode = DMA_Mode_Normal;
dma.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;
dma.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
dma.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
dma.DMA_Priority = DMA_Priority_High;
DMA_Init(DMA1_Channel1,&dma);

DMA_Cmd(DMA1_Channel1,ENABLE);

RCC_ADCCLKConfig(RCC_PCLK2_Div8);
这是ADC(DMA方式)中DMA设置的一部分代码,问题是出在DMA模式设置上dma.DMA_Mode = DMA_Mode_Normal;这句代码如果模式是Normal的话,数据能正常传输到串口上,而配置成DMA_Mode_Circular ,就不能把数据传送到串口上了,这是为什么?不是在ADC实验,DMA更应该设置成循环模式么?

最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=c,true]void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA传输 DMA_DeInit(DMA_CHx); //将DMA的通道1寄存器重设为缺省值 DMA1_MEM_LEN=cndtr; DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; //DMA外设ADC基地址 DMA_InitStructure.DMA_MemoryBaseAddr = cmar; //DMA内存基地址 DMA_Init ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-9-7 22:00:28 | 显示全部楼层
[mw_shl_code=c,true]void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 cpar,u32 cmar,u16 cndtr) { RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //使能DMA传输 DMA_DeInit(DMA_CHx); //将DMA的通道1寄存器重设为缺省值 DMA1_MEM_LEN=cndtr; DMA_InitStructure.DMA_PeripheralBaseAddr = cpar; //DMA外设ADC基地址 DMA_InitStructure.DMA_MemoryBaseAddr = cmar; //DMA内存基地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //数据传输方向,从内存读取发送到外设 DMA_InitStructure.DMA_BufferSize = cndtr; //DMA通道的DMA缓存的大小 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器不变 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器递增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; //数据宽度为8位 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //数据宽度为8位 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //工作在正常缓存模式 DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x拥有中优先级 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMA通道x没有设置为内存到内存传输 DMA_Init(DMA_CHx, &DMA_InitStructure); //根据DMA_InitStruct中指定的参数初始化DMA的通道USART1_Tx_DMA_Channel所标识的寄存器 } [/mw_shl_code]

我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-7 22:51:19 | 显示全部楼层
帮顶....
回复

使用道具 举报

8

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2014-8-5
在线时间
13 小时
 楼主| 发表于 2014-9-9 22:00:55 | 显示全部楼层
回复【3楼】Admin:
---------------------------------
我的那个是先把外设ADC转到内存,再用串口打印出来,问题就出现在DMA的模式配置上,为什么配置成循环的就不行了?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-1 19:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表