今晚打老虎 发表于 5 天前

stc15w4k56s4存在弱上拉电平的问题

因为这次本产品使用的模块不一样,没有使能引脚,在没有任何输出的情况下出现了pwm3输出引脚P2.1出现了拉低电平输出0.87v的问题,问ai说这个是内部存在的上拉电阻导致的,请问这个如何避免这个问题的影响?这边代码配置如下:



/******************************/
//8A系列增强型PWM
/******************************/
void PWM_kuo_zan_init() //特殊功能PWM直接操作输出
{       
        PWM2 =0;
        PWM3 =0;
        PWM4 =0;
        PWM5 =0;
        PWM6 =0;
        PWM7 =0;
       
       
        P0M0 &= ~0xc0;
        P0M1 &= ~0xc0;
        P0 &= ~0xc0;                  //设置P0.6/.P0.7电平
        P2M0 &= ~0x0e;
        P2M1 &= ~0x0e;
P2 &= ~0x0e;                  //设置P2.1/P2.2/P2.3电平
        P3M0 &= ~0x80;
        P3M1 &= ~0x80;
        P3 &= ~0x80;                  //设置P3.7电平
       
       
        P_SW2 |= 0x80;
       
//        P2M0 |= 0x0E;// P2.1 P2.2 P2.3 → M0=1
//P2M1 &= ~0x0E; // P2.1 P2.2 P2.3 → M1=0

       
        PWMCFG = 0x00;                  //配置PWM的输出初始电平为低电平
PWMCKS = 0x00;                  //选择PWM的时钟为Fosc/(0+1)
        PWMCKS = 0x08;                            // PWM时钟为系统时钟
        PWMC = 0xff;                            //设置PWM周期为ffH个PWM时钟

        /*PWM0T1= 0x0100;                     //在计数值为100H地方输出低电平
        PWM0T2= 0x0500;                           //在计数值为500H地方输出高电平
        PWM0CR= 0x00;                           //使能PWM0输出

        PWM1T1= 0x0100;                           
        PWM1T2= 0x0171;                           
        PWM1CR= 0x00;   */      

        PWM2T1= 1;                           
        PWM2T2= 0;                           
        PWM2CR= 0x00;          //PWM2输出到P3.7   

        PWM3T1= 1;                           
        PWM3T2= 0;                           
        PWM3CR= 0x00;          //PWM3输出到P2.1

        PWM4T1= 1;                           
        PWM4T2= 0;                           
        PWM4CR = 0x00;      //PWM4输出到P2.2

        PWM5T1= 1;                           
        PWM5T2= 0;                           
        PWM5CR = 0x00;      //PWM5输出到P2.3
       
        PWM6T1= 1;                           
        PWM6T2= 0;                           
        PWM6CR = 0x00;      //PWM6输出到P1.6   

        PWM7T1= 1;                           
        PWM7T2= 0;                           
        PWM7CR = 0x00;      //PWM7输出到P1.7

PWMCFG = 0x00;                  //配置PWM的输出初始电平
        PWMCR = 0x3f;                   //使能PWM信号输出
PWMCR |= 0x80;                  //使能PWM模块
P_SW2&= ~0x80;
}


void pwm2(unsigned short Wide)
{
    if (Wide == 0)
    {
      PWMCR &= ~0x01;
      PWM2 = 0;
    }
    else if (Wide == CYCLE)
    {
      PWMCR &= ~0x01;
      PWM2 = 1;
    }
    else
    {
      P_SW2 |= 0x80;
      PWM2T1 = Wide;
      P_SW2 &= ~0x80;
      PWMCR |= 0x01;
    }
}

void pwm3(unsigned short Wide)
{
    if (Wide == 0)
    {
      PWMCR &= ~0x02;
      PWM3 = 0;
    }
    else if (Wide >= CYCLE)
    {
      PWMCR &= ~0x02;
      PWM3 = 1;
    }
    else
    {
      P_SW2 |= 0x80;
      PWM3T1 = Wide;
      P_SW2 &= ~0x80;
      PWMCR |= 0x02;
    }
}

void pwm4(unsigned short Wide)
{
    if (Wide == 0)
    {
      PWMCR &= ~0x04;
      PWM4 = 0;
    }
    else if (Wide == CYCLE)
    {
      PWMCR &= ~0x04;
      PWM4 = 1;
    }
    else
    {
      P_SW2 |= 0x80;
      PWM4T1 = Wide;
      P_SW2 &= ~0x80;
      PWMCR |= 0x04;
    }
}

void pwm5(unsigned short Wide)
{
    if (Wide == 0)
    {
      PWMCR &= ~0x08;
      PWM5 = 0;
    }
    else if (Wide == CYCLE)
    {
      PWMCR &= ~0x08;
      PWM5 = 1;
    }
    else
    {
      P_SW2 |= 0x80;
      PWM5T1 = Wide;
      P_SW2 &= ~0x80;
      PWMCR |= 0x08;
    }
}



void IO_init()
{
          P0M0 = 0x00;                              
    P0M1 = 0x00;
    P1M0 = 0x82;                              
    P1M1 = 0x1D;
    P2M0 = 0xff;                              
    P2M1 = 0x00;
    P3M0 = 0x60;                              
    P3M1 = 0x00;
          P4M0 = 0x00;                              
    P4M1 = 0x00;
          P5M0 = 0x00;                              
    P5M1 = 0x00;
}
那个pwm初始化的代码我把那两行P2M0 &= ~0x0e;
        P2M1 &= ~0x0e;注释掉换成下面的的//        P2M0 |= 0x0E;// P2.1 P2.2 P2.3 → M0=1
//P2M1 &= ~0x0E; // P2.1 P2.2 P2.3 → M1=0还是没有用,上传的图片中0.87v是p2.1引脚输出的电平,另外一个30mv的是p2.2和p2.3正常输出的低电平,麻烦给个解决方案规避下,否则会对负载的使用寿命造成影响的

ercircle 发表于 5 天前

1.空板焊接最小系统,对比

2.上传电路图pdf文件

今晚打老虎 发表于 5 天前

ercircle 发表于 2026-3-30 20:16
1.空板焊接最小系统,对比

2.上传电路图pdf文件
电路原理图不方便上传,请问这个是gpio配置错误导致的问题吗?还是说是硬件设置的这个引脚导致的?我们这边硬工给我换了个引脚暂时没有看到问题了,换到了P2.2引脚去了,就是这一块肯定是要解决的,请问如果在没有enable引脚的时候这个问题应该如何规避?

ercircle 发表于 5 天前

今晚打老虎 发表于 2026-3-30 20:28
电路原理图不方便上传,请问这个是gpio配置错误导致的问题吗?还是说是硬件设置的这个引脚导致的?我们这 ...

大概率是板子问题
页: [1]
查看完整版本: stc15w4k56s4存在弱上拉电平的问题