coody_sz 发表于 2023-3-12 11:52 我也想不明白,但是事实证明就是。我用的是STC15W408AS,SOP28封装,芯片最下面的一串数字是2219H3RK92.XA。现在用内部晶振是正常的,只要一用外部晶振,ADC_RES得到的值就是255,我已经排除其他原因了。 这款芯片用好久了,以前都用内部晶振,没发现有什么,这次因为需要高精度时钟,换了外部晶振,就这样了。 我感觉STC的芯片暗BUG多,我曾经还遇到过开机启动不进入程序,并且电流增大,芯片发烫的,最后的解决方案是改电路,增加延时电容,延迟启动单片机,就好了。这些神奇的BUG我一直找不到原因。。。 |
leeye 发表于 2023-3-11 19:43 怎么会?ADC时钟取自系统时钟,系统时钟是内部时钟、外部晶振二选一。 我有好多东西用的STC15W408AS做的,就是因为带ADC和PWM、SPI、串口,而我基本都使用外部晶振的。 |
把查询 ADC完成标志的语句 改成: while((ADC_CONTR & 0x20) != 0x20); 或者: while((ADC_CONTR & 0x20) == 0x00); |
我今天调试STC15W408AS发现,使用外部晶振ADC就采不到数据,我这个10位的采出来永远都是0x03FF,换成内部晶振采的数据就准确了。 我猜测你是不是也用外部晶振。这个BUG直接想骂人! ![]() |
直接下载STC官方例程就可以测试啦 |
楼主这个问题解决了吗 |
从程序说你看看adc定义的数据类型 |
R1接地了没有? 多少是要并联一个104电容在R1两头的 至于官方电路,串不串电感和0欧电阻要不要都无所谓,反正你对精度没有要求 |
要参考官方的电路图 |
1、把R1短路看看ADC值 2、确保V看看Vref接了Vcc |
手册中的原理图要看看比对一下,AVCC接到VCC时串个电感,AGND接到GND时加个0R电阻,这是有作用的,不然人家不会推荐这种电路接法 |