打印
[STM32F2]

程序一直跑不起来

[复制链接]
555|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kangzj|  楼主 | 2021-3-16 22:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用stm32f205芯片,写了个读取电压的程序,用ADC+DMA,单通道读取,程序一直跑不起来

使用特权

评论回复
沙发
liuzaiy| | 2021-3-16 22:41 | 只看该作者
驱动部分程序看看

使用特权

评论回复
板凳
kangzj|  楼主 | 2021-3-16 22:44 | 只看该作者

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);
}

使用特权

评论回复
地板
chenjunt| | 2021-3-16 22:46 | 只看该作者
要说明,你遇到了什么,调试到哪个步骤,出现什么故障。

使用特权

评论回复
5
kangzj|  楼主 | 2021-3-16 22:48 | 只看该作者
就是以前用stm32f103,ADC的操作比较简单,现在用205的,写了这段驱动,一直读取不到ADC_DR数据寄存器的数据

使用特权

评论回复
6
kangzj|  楼主 | 2021-3-16 22:52 | 只看该作者
不知道问题出在DMA传输还是ADC。

使用特权

评论回复
7
huwr| | 2021-3-16 22:54 | 只看该作者
换个通道测试下看看;

使用特权

评论回复
8
gongche| | 2021-3-16 22:57 | 只看该作者
这个问题, 直接使用库里的例程就可以了

使用特权

评论回复
9
huwr| | 2021-3-16 22:59 | 只看该作者
一直读取不到ADC_DR数据寄存器的数据,不知道问题出在DMA传输还是ADC。

使用特权

评论回复
10
huanghuac| | 2021-3-16 23:00 | 只看该作者
我不知道你是怎么读的. 因为 ADC 的结果被 DMA 读了, 你的软件就检测不到 ADC 转换完成状态了.

使用特权

评论回复
11
kangzj|  楼主 | 2021-3-16 23:02 | 只看该作者
可以读取到电压了,不过还有一个问题就是,启动才读取一次,重新上电后读取的电压才有改变,目前管脚是悬空的

使用特权

评论回复
12
wenfen| | 2021-3-16 23:03 | 只看该作者

ADC_SoftwareStartConv(ADC1);

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

使用特权

评论回复
13
tian111| | 2021-3-16 23:05 | 只看该作者
或者设置 ADC 自动连续转换

使用特权

评论回复
14
songqian17| | 2021-3-16 23:07 | 只看该作者
设置是直接
ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
吗?

使用特权

评论回复
15
chenho| | 2021-3-16 23:09 | 只看该作者
这个是有设置的,还是说有其他设置?

使用特权

评论回复
16
zwll| | 2021-3-16 23:13 | 只看该作者
是的, 你试试吧, 可能 DMA 也需要中断处理了

使用特权

评论回复
17
huwr| | 2021-3-16 23:15 | 只看该作者
没用过F2的芯片,跟F1有什么区别吗?

使用特权

评论回复
18
happy_10| | 2021-3-16 23:17 | 只看该作者

是不是通道配置有问题,建议换一个吧。

使用特权

评论回复
19
chuxh| | 2021-3-16 23:18 | 只看该作者
ADC 的结果被 DMA 读了, 软件就检测不到 ADC 转换完成状态了

使用特权

评论回复
20
kangzj|  楼主 | 2021-3-16 23:20 | 只看该作者
好的,我明天去单位试一下,多谢各位大侠了哈

使用特权

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

本版积分规则

672

主题

7007

帖子

2

粉丝