[STM32F2]

stm32f205

[复制链接]
2378|11
手机看帖
扫描二维码
随时随地手机跟帖
scilics|  楼主 | 2017-11-10 13:14 | 显示全部楼层 |阅读模式
用stm32f205芯片,写了个读取电压的程序,用ADC+DMA,单通道读取,程序一直跑不起来,麻烦各位大神帮小生看看,感激不尽!!下面是驱动部分...,不知道哪里写错了
static void ADCx_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
       
        GPIO_Init(GPIOC, &GPIO_InitStructure);
}



static void ADCx_Mode_Config(void)
{
        DMA_InitTypeDef DMA_InitStruct;
        ADC_InitTypeDef ADC_InitStruct;
        ADC_CommonInitTypeDef ADC_CommonInitStruct;
       
        RCC_APB2PeriphClockCmd ( RCC_APB2Periph_ADC1, ENABLE );
        RCC_AHB1PeriphClockCmd ( RCC_AHB1Periph_DMA2, ENABLE );
       
        DMA_DeInit(DMA2_Stream0);
  DMA_InitStruct.DMA_Channel = DMA_Channel_0;
  DMA_InitStruct.DMA_PeripheralBaseAddr = (uint32_t)(&(ADC1->DR));
  DMA_InitStruct.DMA_Memory0BaseAddr = (uint32_t)&ADC_ConvertedValue;
  DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralToMemory;/*ÍâÉèµ½ÄÚ´æ*/
  DMA_InitStruct.DMA_BufferSize = 1;
  DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Disable;
  DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  DMA_InitStruct.DMA_Mode = DMA_Mode_Circular;
  DMA_InitStruct.DMA_Priority = DMA_Priority_High;
  DMA_InitStruct.DMA_FIFOMode = DMA_FIFOMode_Disable;
  DMA_InitStruct.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
  DMA_InitStruct.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  DMA_InitStruct.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  
  DMA_Init(DMA2_Stream0, &DMA_InitStruct);
        DMA_Cmd(DMA2_Stream0, ENABLE);
       
        ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
        ADC_InitStruct.ADC_ScanConvMode = DISABLE;
        ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
        ADC_InitStruct.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
        ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
        ADC_InitStruct.ADC_NbrOfConversion = 1;
       
        ADC_CommonInitStruct.ADC_Mode = ADC_Mode_Independent;
        ADC_CommonInitStruct.ADC_Prescaler = ADC_Prescaler_Div6;
        ADC_CommonInitStruct.ADC_DMAAccessMode = ADC_DMAAccessMode_3;
        ADC_CommonInitStruct.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_10Cycles;
       
        ADC_Init(ADC1, &ADC_InitStruct);
        ADC_CommonInit(&ADC_CommonInitStruct);
       
        ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_15Cycles);

        ADC_Cmd(ADC1, ENABLE);
        ADC_SoftwareStartConv(ADC1);
}
grant_jx| | 2017-11-10 14:37 | 显示全部楼层
你这样贴段代码,没人会回答你的。
问问题,至少你要说明,你遇到了什么,调试到哪个步骤,出现什么故障。

使用特权

评论回复
scilics|  楼主 | 2017-11-10 16:07 | 显示全部楼层
就是以前用stm32f103,ADC的操作比较简单,现在用205的,写了这段驱动,一直读取不到ADC_DR数据寄存器的数据,不知道问题出在DMA传输还是ADC。

使用特权

评论回复
mmuuss586| | 2017-11-10 16:38 | 显示全部楼层
scilics 发表于 2017-11-10 16:07
就是以前用stm32f103,ADC的操作比较简单,现在用205的,写了这段驱动,一直读取不到ADC_DR数据寄存器的数 ...

换个通道测试下看看;

使用特权

评论回复
airwill| | 2017-11-11 08:32 | 显示全部楼层
这个问题, 直接使用库里的例程就可以了

一直读取不到ADC_DR数据寄存器的数据,不知道问题出在DMA传输还是ADC。

我不知道你是怎么读的. 因为 ADC 的结果被 DMA 读了, 你的软件就检测不到 ADC 转换完成状态了.

使用特权

评论回复
scilics|  楼主 | 2017-11-11 09:39 | 显示全部楼层
airwill 发表于 2017-11-11 08:32
这个问题, 直接使用库里的例程就可以了

一直读取不到ADC_DR数据寄存器的数据,不知道问题出在DMA传输还是A ...

可以读取到电压了,不过还有一个问题就是,启动才读取一次,重新上电后读取的电压才有改变,目前管脚是悬空的

使用特权

评论回复
airwill| | 2017-11-11 10:07 | 显示全部楼层
ADC_SoftwareStartConv(ADC1);

只在初始化的时候触发了一次. 你可以在主程序里也也调用触发
或者设置 ADC 自动连续转换

使用特权

评论回复
scilics|  楼主 | 2017-11-11 11:50 | 显示全部楼层
airwill 发表于 2017-11-11 10:07
ADC_SoftwareStartConv(ADC1);

只在初始化的时候触发了一次. 你可以在主程序里也也调用触发

设置是直接
ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
吗?
这个是有设置的,还是说有其他设置?

使用特权

评论回复
airwill| | 2017-11-11 16:59 | 显示全部楼层
是的, 你试试吧, 可能 DMA 也需要中断处理了

使用特权

评论回复
junpeng324| | 2017-11-11 22:16 | 显示全部楼层
没用过F2的芯片,跟F1有什么区别吗?

使用特权

评论回复
dingbo95| | 2017-11-11 22:49 | 显示全部楼层
是不是通道配置有问题,建议换一个吧。

使用特权

评论回复
CCompton| | 2017-11-14 11:06 | 显示全部楼层
ADC 的结果被 DMA 读了, 软件就检测不到 ADC 转换完成状态了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

13

帖子

0

粉丝