风-417456 发表于 2015-5-15 15:27:29

求助STM8 AD采样初始化

/* -------------------------------------------------------------------------- */
/* ROUTINE NAME: ADC_Init                                                   */
/* INPUT/OUTPUT: None.                                                      */
/* DESCRIPTION:Initialize the AD converter.                                 */
/* -------------------------------------------------------------------------- */
void ADC_Init(void)
{
    ADC_CR2= 0x00;
    ADC_CR1= 0x00;
    ADC_CSR= 0x03;
    ADC_TDRL = 0x20;
}


以上是ST官方套件板上的AD初始化的例程,ADC_CR2,ADC_CR1,ADC_CSR 这三个好理解,ADC_TDRL是ADC施密特触发器禁止寄存器低位,置位是为降低IO静态功耗,如果是这样,目前用到的是AIN3,为什么例程里只关闭了AIN5口的施密特触发,处于功耗考虑的话,实际功能上的话不关闭应该也是不影响的吧?

zhuoyemp4 发表于 2015-5-15 16:54:36

本帖最后由 zhuoyemp4 于 2015-5-15 17:02 编辑

首先,你要正确理解单片机IO口的结构,具体框图可见参考手册。
其次,你要正确理解施密特触发器在IO口中的作用,与普通的门电路不同,施密特触发器有两个阈值电压,分别称为正向阈值电压和负向阈值电压。在输入信号从低电平上升到高电平的过程中使电路状态发生变化的输入电压称为正向阈值电压,在输入信号从高电平下降到低电平的过程中使电路状态发生变化的输入电压称为负向阈值电压。他是作为数字输入时滤波用的。
最后,既然施密特触发器只作为数字输入时的滤波,那么在模拟输入时他就没什么作用了,为了你的采样更准确,那就把他关闭吧。至于关哪个,哪个用做模拟输入口,那就关哪个。


奔跑小蜗牛 发表于 2015-5-15 16:59:12

AIN5是TXD复用口,程序里是不是还有串口输出?有串口当然关闭了。实际应用,不用管,没问题。

zhuoyemp4 发表于 2015-5-15 17:08:09

看看IO口结构框图(QQ截图没截全),作为数字输入时施密特触发器才起作用,我们io输入寄存器的值是由施密特触发器来的。在作为模拟输入时,施密特触发器不仅没用,还可能影响采样的准确性,所以最好关闭。

zhuoyemp4 发表于 2015-5-15 17:12:50

参考手册里的各个结构框图对于理解配置有很大帮助,但关注的人太少了。还有数据手册里各个注释的小字,往往问题的出现就是不看数据手册里的注释小字引起的。

风-417456 发表于 2015-5-15 21:00:16

zhuoyemp4 发表于 2015-5-15 16:54
首先,你要正确理解单片机IO口的结构,具体框图可见参考手册。
其次,你要正确理解施密特触发器在IO口中的 ...

多谢讲的这么细,学到不少。软件之前接触少,都只负责电路板这块。电路上用的是AIN3,如果按照这样的话AIN3应该关掉,但是官方例程里关了AIN5,所以我一直弄不明白他的程序这样到时是为什么,处于什么原因关闭AIN5。

风-417456 发表于 2015-5-15 21:01:51

奔跑小蜗牛 发表于 2015-5-15 16:59
AIN5是TXD复用口,程序里是不是还有串口输出?有串口当然关闭了。实际应用,不用管,没问题。 ...

用的是STM8S105S4K6,定义上串口和AD脚没有复用,所以应该不是因为通信

zhuoyemp4 发表于 2015-5-16 10:09:28

风-417456 发表于 2015-5-15 21:00
多谢讲的这么细,学到不少。软件之前接触少,都只负责电路板这块。电路上用的是AIN3,如果按照这样的话AI ...

你要根据自己的实际情况来写,明白吗?官方例程里可能用的模拟输入就是AIN5
页: [1]
查看完整版本: 求助STM8 AD采样初始化