找回密码
 立即注册
查看: 24|回复: 3

stc15w4k56s4存在弱上拉电平的问题

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-03-30 18:37:33
已绑定手机

2

主题

14

回帖

108

积分

注册会员

积分
108
发表于 前天 18:37 | 显示全部楼层 |阅读模式
因为这次本产品使用的模块不一样,没有使能引脚,在没有任何输出的情况下出现了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正常输出的低电平,麻烦给个解决方案规避下,否则会对负载的使用寿命造成影响的

80FB6A8C94BDA57110A576C2AE228E05.png
83028DEC568BB879B920232619A7CBFA.png
F8A8F635A8A20CAC5772B4A27228654F.png
ScreenShot_2026-03-30_183502_073.png
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:491
  • 最近打卡:2026-03-31 08:56:02
已绑定手机

104

主题

4219

回帖

9371

积分

荣誉版主

无情的代码机器

积分
9371
发表于 前天 20:16 | 显示全部楼层
1.空板焊接最小系统,对比

2.上传电路图pdf文件
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2026-03-30 18:37:33
已绑定手机

2

主题

14

回帖

108

积分

注册会员

积分
108
发表于 前天 20:28 | 显示全部楼层
erci*** 发表于 2026-3-30 20:16
1.空板焊接最小系统,对比

2.上传电路图pdf文件

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

点评

大概率是板子问题  详情 回复 发表于 前天 21:15
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:491
  • 最近打卡:2026-03-31 08:56:02
已绑定手机

104

主题

4219

回帖

9371

积分

荣誉版主

无情的代码机器

积分
9371
发表于 前天 21:15 | 显示全部楼层
今晚*** 发表于 2026-3-30 20:28
电路原理图不方便上传,请问这个是gpio配置错误导致的问题吗?还是说是硬件设置的这个引脚导致的?我们这 ...

大概率是板子问题
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-1 03:39 , Processed in 0.109321 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表