双ADC规则同步模式的初始化问题

2019-08-14 08:00发布

    直奔主题吧,我使用的是STM32F103C8T6芯片,需要设计双ADC规则同步模式并且利用中断读取ADC的值,我的初始化代码如附件图片。据我所知,当两个ADC设置为规则同步模式时,ADC1采集的数据会传输给DR寄存器的低16位,而ADC2采集的数据会传输给DR寄存器的高16位。然后我现在遇见的问题是:ADC2(我设置的是通道1)可以正常采集到模拟信号,也就是DR寄存器的高16位有数据;ADC1(我设置的是通道2)却无法读取到该IO口的模拟信号(确定有信号输入)准确来说是一直维持在1.6V不随外界输入信号的变化而变化。对于这个问题我怀疑是我写的ADC的初始化程序存在一些问题,希望写过类似程序的大神能帮我看看是否存在问题,先行谢过了!!~~
PS:在线等。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
DownStars
1楼-- · 2019-08-14 11:22
我知道问题所在了,
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
这一句代码要写在这一句
ADC_ExternalTrigConvCmd(ADC2, ENABLE);
的后面。
虽然我还不知道为什么,但是问题已经解决了。
DownStars
2楼-- · 2019-08-14 13:08
再补充一下:ADC1和2都是单通道,对于GPIO口的初始化的代码很简单,我就没贴出来。
DownStars
3楼-- · 2019-08-14 17:48
中断服务函数如下:
void ADC1_2_IRQHandler(void)
{       
        if (ADC_GetITStatus(ADC1,ADC_IT_EOC)==SET)
        {
                if(i<512)
                        {
                 ADC_12_ConvertedValue[i]=(uint32_t) ADC1->DR;
           i++;
                        }
                        else
                        {                       
                        j=i%512;
                        ADC_12_ConvertedValue[j]=(uint32_t) ADC1->DR;
            i++;
                        }               
        }
        ADC_ClearITPendingBit(ADC1,ADC_IT_EOC);
}
DownStars
4楼-- · 2019-08-14 22:52
 精彩回答 2  元偷偷看……
DownStars
5楼-- · 2019-08-15 00:21
对了,ADC_InitStructure.ADC_NbrOfChannel=NOFCHANEL;这条语句中NOFCHANEL宏定义为1了。
Anyint
6楼-- · 2019-08-15 03:15
DownStars 发表于 2017-5-21 15:20
我知道问题所在了,
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
这一句代码要写在这一句

楼主我想问下ADC1是算一个通道,还是说ADC1下面有很多个通道?比如ADC1_Channel0、ADC1_Channel1、ADC1_Channel2、ADC1_Channel3、ADC1_Channel4

一周热门 更多>