oldzhangzcm 发表于 2025-3-6 14:36:09

15W4K48S4外接晶体第9ADC通道值为0

我用15W4K48S4W设计的板子,由于要用串口高速通信,需要波特率稳定可靠,就外接了22.1184M的晶体,利用第9ADC通道获取内部电压基准的程序,就无法读取第9通道的ADC值了(ADC值为00),我把晶体2个脚短路,用片内振荡器,就能获得第9通道的ADC值了。
程序中短路外接晶体 VxH,VxL正常,使用外接晶体VxH=0x00, VxL=0x00

void ADCtr(void)
{
      unsigned char i;
      P1ASF = 0X00;
      CLK_DIV |= 0X20;                //高2位,低8位
      ADC_CONTR = 0X80;                //POWR= 0X80;
      for(n =5000; n !=0; n--);      //ADC上电延时
      n=0;
      for(i=16; i!=0; i--)
      {
                ADC_CONTR = 0X88;      //POWR=0X80;START = 0X08;通道0X00;
                _nop_();_nop_();_nop_();_nop_();
                while(!(ADC_CONTR & 0X10));
                while(ADC_CONTR & 0X08);
                ADC_CONTR = 0X80;
                n += ((ADC_RES<<8) | ADC_RESL);
      }
      n /= 16;
      VrH = n>>8;
      VrL = n;
/*************************************/
      n=0;
      P1ASF = 0X20;                //ADC=P15
      ADC_CONTR = 0X85;      //POWR = 0X80;START=0X08;通道0X05(P15);
      for(i=16; i!=0 ;i--)
      {
                ADC_CONTR=0X8D;      //POWR = 0X80;START=0X08;通道0X05(P15);
                _nop_();_nop_();_nop_();_nop_();
                while(!(ADC_CONTR & 0X10));
                while(ADC_CONTR & 0X08);
                ADC_CONTR=0X85;      //POWR = 0X80;START=0X08;通道0X05(P15);
                n += ((ADC_RES<<8) | ADC_RESL);
      }
      n /= 16;
      VxH = n>>8;
      VxL = n;
}

oldzhangzcm 发表于 2025-3-6 17:34:11

ADC采样时钟频率已经最低了,这种问题是芯片的BUG吗?AI 回答不了吧

梁工 发表于 2025-3-7 10:46:36

STC15W系列MCU当使用外部晶振时, ADC不能测量Bandgap电压值,不能读取第9通道的值,读出是错误的值。
页: [1]
查看完整版本: 15W4K48S4外接晶体第9ADC通道值为0