人类的孤独像是一种与生俱来的残疾。

STM8S开启ADC之后读GPIO无反应

模拟电路 smallfish 1774℃

这里记录一下这个问题,以备后面查询。

事情是业余帮人写个STM8S的程序,用到了一个单总线触摸芯片和ADC,在开启ADC之前一切都正常,但是初始化ADC之后,就读不到触摸芯片输出的数据了。所以问题指向是很明显的,在开启ADC之后发生了异常。所以就从ADC初始化程序开始查。

static inline void adc_config(void)
{
    ADC1_DeInit();
    ADC1_Init(ADC1_CONVERSIONMODE_SINGLE,
            ADC1_CHANNEL_3,
            ADC1_PRESSEL_FCPU_D2,
            ADC1_EXTTRIG_TIM,
            DISABLE,
            ADC1_ALIGN_RIGHT,
            ADC1_SCHMITTTRIG_ALL,
            DISABLE);
    ADC1_StartConversion();
}

代码非常简单,但是由于代码是继承自另一个项目,而且之前都是直接操作寄存器,用ST的库比较少,所以对库函数不是很熟。不过ST的库写得非常好,即便不是特别清楚库函数的细节也可以“望文生义”。可以说是“代码自注释”的典范。

通过注释调试,问题出在第个库函数调用上,但是问题究竟是啥还是没明白,最后在网上找到了:http://www.51hei.com/bbs/dpj-40932-1.html

非常感谢原作者。

这里再次转述一下。即最后两个参数,导致了问题。使用ADC的时候将GPIO上的斯密特触发器关闭了,而且它关的是全部,我的触摸芯片引脚用的PD6,因此只能读到0。所以只要将倒数第二个参数ADC1_SCHMITTTRIG_ALL改为ADC1_SCHMITTTRIG_CHANNEL3(我使用的是通道3)即可。

 

转载请注明:OpenMind » STM8S开启ADC之后读GPIO无反应

喜欢 (0)