OpenEdv-开源电子网

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

关于ADC和DMA的初始化的问题

[复制链接]

39

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2014-1-9
在线时间
8 小时
发表于 2014-3-31 10:53:07 | 显示全部楼层 |阅读模式
这是我的ADC和DMA的初始化程序
void ADC_GPIO_Config(void)
{
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE);
       
    GPIO_InitStruct.GPIO_Pin    = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStruct.GPIO_Mode   = GPIO_Mode_AIN;
GPIO_Init(GPIOC,&GPIO_InitStruct);
   RCC_ADCCLKConfig(RCC_PCLK2_Div6);   
   ADC_DeInit(ADC1);  

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //
ADC_InitStructure.ADC_NbrOfChannel = 3;
ADC_Init(ADC1, &ADC_InitStructure);

ADC_RegularChannelConfig(ADC1,ADC_Channel_10, 1,ADC_SampleTime_239Cycles5); 
ADC_RegularChannelConfig(ADC1,ADC_Channel_11, 2,ADC_SampleTime_239Cycles5); 
      ADC_RegularChannelConfig(ADC1,ADC_Channel_12, 3,ADC_SampleTime_239Cycles5); 
ADC_DMACmd(ADC1,ENABLE);  

ADC_Cmd(ADC1, ENABLE);
ADC_ResetCalibration(ADC1);
 
while(ADC_GetResetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1); //????ADC????×?
 
while(ADC_GetCalibrationStatus(ADC1));  
 
//ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
void ADC_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
 __nop();                  
  __nop();                    
  __nop();

    DMA_DeInit(DMA1_Channel1);   
 

// DMA1_MEM_LEN=cndtr;
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)ADC1_DR_Address;  //
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)ADC_Keep;  //
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  //
DMA_InitStructure.DMA_BufferSize = N*M;  //
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;  //
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;  //
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  //
DMA_InitStructure.DMA_Priority = DMA_Priority_High; //
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //
DMA_Init(DMA1_Channel1, &DMA_InitStructure);  //

//DMA_Cmd(DMA1_Channel1, ENABLE);  //
 
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2014-1-9
在线时间
8 小时
 楼主| 发表于 2014-3-31 10:54:11 | 显示全部楼层
初始化的时候,我先初始化ADC再初始化DMA,程序就卡在DMA的初始化了,不会往下走了。
但反过来,我先初始化DMA,再初始化ADC,程序就没问题了。
请问这怎么回事?必须先初始化DMA吗?
回复 支持 反对

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-31 13:11:12 | 显示全部楼层
“我先初始化ADC再初始化DMA,程序就卡在DMA的初始化了”
卡在哪条语句,不应该出现这种情况的。。。
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

39

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2014-1-9
在线时间
8 小时
 楼主| 发表于 2014-3-31 13:20:17 | 显示全部楼层
回复【3楼】xiaoyan:
---------------------------------
额,我没查看卡在那条语句上了
回复 支持 反对

使用道具 举报

39

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2014-1-9
在线时间
8 小时
 楼主| 发表于 2014-4-1 09:51:39 | 显示全部楼层
回复【3楼】xiaoyan:
---------------------------------
怎么会是这里呢?额,我今天查了一下毛病,居然是这里,可我更不能理解了。
 ADC_DMA_Config();
 ADC_GPIO_Config();

LCD_Init9331();
这是相关的程序,如果我调用ADC_GPIO_Config();,再调用 ADC_DMA_Config();然后程序就会卡在LCD_Init9331()写命令的语句上LCD_WriteReg(0x00EC,0x108F);也就是9331初始化第一条语句上,可如果我先初始化DMA,在初始化ADC,下面的9331的写命令语句就会正常执行了,我用的是32的FSMC,没有和ADC的IO口相重合的啊,而且我注释掉ADC_DMA_Config();初始化语句的话,程序也能呢过正常运行,不会卡在9331那里
回复 支持 反对

使用道具 举报

39

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
298
金钱
298
注册时间
2014-1-9
在线时间
8 小时
 楼主| 发表于 2014-4-1 10:07:00 | 显示全部楼层
回复【5楼】巫妖:
---------------------------------
static __inline void LCD_WriteReg(u16 index, u16 val)
{
    (*(__IO u16 *) (Bank1_LCD_C)) = index;
    (*(__IO u16 *) (Bank1_LCD_D)) = val;
}
,这是我的写LCD的程序,他卡在上LCD_WriteReg(0x00EC,0x108F),我在进去这条函数一步一步执行,系统会提示我could not stop Crotex-M Device,please check the JTAG cable。怎么会跑到JTAG的毛病去上,可我先初始化DMA,在初始化ADC,就没毛病了,可以正常运行
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-13 01:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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