找回密码
 立即注册
查看: 124|回复: 16

8G1K08,配置了P3.5为推挽输出P3.6为高阻态输入,P3.6正常但P3.5无输出

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-09-12 09:01:48
已绑定手机

2

主题

6

回帖

96

积分

注册会员

积分
96
发表于 6 天前 | 显示全部楼层 |阅读模式
8G1K08,配置了P3.5为推挽输出P3.6为高阻态输入,P3.6正常但P3.5无输出

我在论坛也发现了类似p3.5无输出的问题https://www.stcaimcu.com/thread-20024-1-1.html能不能请售后工程师找一下是什么原因?
以下是源代码

#include "system.h"
#include "HX711.h"
#include "STC8xxxx.H"
#define   nAdjSize   34

float        HX711_Buffer        = 0;
float        Weight_Maopi        =        0;
float Weight_Shiwu        =        0;
unsigned long  nW_Max,nW_Min;
unsigned long  nWeight_Result;
unsigned long  xdata weight_[nAdjSize];   
//unsigned long  weight_;


/****************************************************
//读取HX711
****************************************************/
unsigned long HX711_Read(void) //增益128
{
        unsigned long count;
        unsigned char i;
        CZSDA=1;
        delay_us(2);
        CZSCK=0;
        count=0;
        while(CZSDA);
        for(i=0;i<24;i++)
        {
                CZSCK=1;
                delay_us(2);
                count=count<<1;
                CZSCK=0;
                delay_us(2);
                if(CZSDA)
                count++;
        }
                CZSCK=1;
          delay_us(2);
                CZSCK=0;
        
//                count=0x801021;  //4129
                count^=0x800000;//第25个脉冲下降沿时, 转换数据
          return(count);
}

/*获取毛皮质量*/
float Get_Maopi(void)
{
        int x;
        unsigned long  tmp = 0;
        unsigned long  nMin,nMax,dat;
        nMin = nMax = 0;
        for(x=0;x<10;x++)
        {
                dat = HX711_Read();
                if(x==0)
                {
                        nMin = nMax=dat;
                }
                else
                {
                        if(nMin>dat)
                        {
                                nMin=dat;
                        }
                        if(nMax<dat)
                        {
                                nMax=dat;
                        }
                }

                tmp+=dat;
        }

        tmp-=nMax;
        tmp-=nMin;
        
        HX711_Buffer = tmp/8; //HX711_Read();
        Weight_Maopi = HX711_Buffer/100;
        return Weight_Maopi;
}

float Get_Weight(void)
{
        unsigned long tmpa;
        HX711_Buffer        =        HX711_Read();  //HX711_Buffer        =        HX711_Read();
        HX711_Buffer        =        HX711_Buffer/100;
        if (HX711_Buffer > Weight_Maopi)
        {
                tmpa        =        HX711_Buffer;
                tmpa        =        tmpa        -        Weight_Maopi;
                //Weight_Shiwu = (Weight_Shiwu/4.439+0.02);               
                //计算实物的实际重量
                //因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。
        }
        else
        {
                tmpa = 0;
        }
        return tmpa;
}


这是输出设置

这是输出设置

这是推挽输出

这是推挽输出
回复

使用道具 举报 送花

3

主题

1967

回帖

782

积分

等待验证会员

积分
782
发表于 6 天前 | 显示全部楼层
关于STC8G1K08芯片P35引脚配置为推挽输出无输出的问题分析与建议

尊敬的开发者:

您好!针对您反馈的STC8G1K08芯片在配置P35为推挽输出时无法输出信号的问题,我们进行了初步分析并提出以下排查建议。

一、问题现象
1. P35配置为推挽输出模式
2. P36配置为高阻态输入模式
3. 实际测试发现:
P36工作正常(验证配置有效性)
P35无预期输出信号

二、配置验证建议
1. 端口初始化检查
建议重点检查以下配置寄存器设置:
  1. c
  2. P3M1 = 0x00;  // 设置P3口为推挽输出
  3. P3M0 = 0xFF;
复制代码
需确认:
P3M1和P3M0寄存器配置是否正确
是否存在后续配置覆盖情况
是否在中断或DMA操作中被意外修改

2. 硬件连接检查
测量P35对地电阻值(正常应为高阻态)
检查PCB是否存在短路/虚焊
验证电源供电稳定性(特别是VCC波动可能影响IO驱动能力)

三、特殊功能复用排查
1. 外设功能冲突
检查是否启用了P35复用功能(如UART、SPI等),可通过以下寄存器确认:
  1. c
  2. P3ASF = 0x00; // 设置为通用IO口
复制代码

2. 全局中断配置
若使用了中断服务程序,建议检查:
中断优先级配置
中断服务程序是否异常
是否存在堆栈溢出风险

四、代码优化建议
根据提供的代码片段,建议改进以下方面:
1. 变量定义优化
  1. c
  2. // 建议增加volatile修饰符
  3. volatile float HX711Buffer = 0;
  4. volatile float WeightMaopi = 0;
  5. volatile float WeightShiwu = 0;
  6. // 建议增加初始化
  7. unsigned long nWMax = 0, nWMin = 0;
  8. unsigned long nWeightResult = 0;
  9. unsigned long xdata weight[nAdjSize] = {0};
复制代码

2. 延时函数规范
建议使用标准延时函数:
  1. c
  2. include "intrins.h"
  3. void delayus(unsigned int us) {
  4.     while(us--) {
  5.         nop();
  6.     }
  7. }
复制代码

五、硬件特性注意事项
1. 驱动能力限制
STC8G系列IO口最大灌电流12mA
需注意负载匹配(建议串接限流电阻)

2. 上电时序要求
复位电路需满足最小复位脉宽要求
建议增加上电延时初始化

六、典型问题排查流程
1. 最小系统验证
使用P33等其他IO进行对比测试
搭建最小验证程序:
  1. c
  2. void main() {
  3.     P3M1 = 0x00;
  4.     P3M0 = 0xFF;
  5.    
  6.     while(1) {
  7.         P35 = 1;
  8.         delayms(500);
  9.         P35 = 0;
  10.         delayms(500);
  11.     }
  12. }
复制代码

2. 示波器测量要点
测量P35实际波形而非万用表电压
检查信号完整性(过冲/振铃)
测量时钟源稳定性

七、技术支持准备
建议提供以下信息以便进一步分析:
1. 完整工程代码(含头文件)
2. 硬件原理图(重点关注IO外围电路)
3. 实际测量波形截图
4. 使用的开发环境版本信息

我们建议按照上述步骤进行系统性排查。若仍无法解决问题,欢迎通过官方技术支持渠道提交完整问题描述,我们的工程师将为您提供进一步的技术支持。

祝开发顺利!

国芯人工智能技术团队
2023年X月X日

(注:本文基于公开技术资料整理,具体问题需结合实际应用场景分析)

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:517
  • 最近打卡:2025-09-18 12:36:09
已绑定手机

45

主题

2228

回帖

7828

积分

论坛元老

积分
7828
发表于 6 天前 | 显示全部楼层
直接烧录附件例子里的hex文件到芯片里试试
如果P35还是没有输出的话,将P35外围电路断开,并排查是否有虚焊或者短路。

IO口测试-P33-P35.zip

5.84 KB, 下载次数: 1

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:302
  • 最近打卡:2025-09-18 08:50:50
已绑定手机

82

主题

3126

回帖

6929

积分

荣誉版主

无情的代码机器

积分
6929
发表于 6 天前 | 显示全部楼层
此类问题先用最简代码测一下:


截图202509120934384326.jpg
  1. #include <STC8G.H>
  2. #include <def.H>
  3. void Delay500ms(void)        //@11.0592MHz
  4. {
  5.         unsigned char data i, j, k;
  6.         _nop_();
  7.         _nop_();
  8.         i = 22;
  9.         j = 3;
  10.         k = 227;
  11.         do
  12.         {
  13.                 do
  14.                 {
  15.                         while (--k);
  16.                 } while (--j);
  17.         } while (--i);
  18. }
  19. void main()
  20. {
  21.         P_SW2 |= 0x80;
  22.        
  23.         P3M0 = 0x20; P3M1 = 0x00;
  24.         while(1){
  25.                 P35 = ~P35;
  26.                 Delay500ms();
  27.         };
  28.        
  29. }
复制代码


三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-09-12 09:01:48
已绑定手机

2

主题

6

回帖

96

积分

注册会员

积分
96
发表于 6 天前 | 显示全部楼层
1、关于驱动能力的问题这个问题不存在,因为p3.5是用来做时钟驱动
2、关于推挽配置也是按STC官方烧录软件提供的配置小程序输入相关信息配置方法进行的配置(附图是详细的配置截图)
3、无波形输出是用示波器测量的也不是用万用表测试的
4、单独进行测试p3.5口的推挽输出是正常的(有波形输出)
截图202509120933594344.jpg

点评

使用楼上代码测试或上传可复现问题最简程序看看  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:302
  • 最近打卡:2025-09-18 08:50:50
已绑定手机

82

主题

3126

回帖

6929

积分

荣誉版主

无情的代码机器

积分
6929
发表于 6 天前 | 显示全部楼层
Gugua*** 发表于 2025-9-12 09:38
1、关于驱动能力的问题这个问题不存在,因为p3.5是用来做时钟驱动
2、关于推挽配置也是按STC官方烧录软件提 ...

使用楼上代码测试或上传可复现问题最简程序看看
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-09-12 09:01:48
已绑定手机

2

主题

6

回帖

96

积分

注册会员

积分
96
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-9-12 09:46
使用楼上代码测试或上传可复现问题最简程序看看

#include "system.h"
#include "HX711.h"
#include "STC8xxxx.H"


u8  AA[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f,0x40,0x37,0x00};   

void All_int(void)
{
           AUXR&=0XFD;
           GPIO_config();  
     P1M0 = 0x80; P1M1 = 0x00;
     P3M1 = 0x51; P3M0 = 0xae;
     P3M1 = 0x01; P3M0 = 0x06
     P5M1 = 0x00; P5M0 = 0x00;
           Timer_config();                  
           UART_config();     
           RS485_EN=0;
}

void main(void)
{

        static        u16 i = 0;
         All_int();
         EA = 1;

//         delay_ms(10);
//         EEPROM_read_n(0x0010,suoset,2);
//         delay_ms(10);
//         rs485_transmitS(suoset,2);
//         LED_DIR=suoset[1];
//         suoset[0]=0;
//         LED=0;
//         if(LED_DIR>1)
//         {
//            LED_DIR=1;
//         }
//        rs485_transmitS(suoset,2);
         
         Display(2);
         delay_ms(1);
         while(1)
         {
                        USART1_Command_parsing();
      qang_state();
      ID_set();
                  SouOpen();
                  SouLock();
      SegDisplay_serve();
      delay_us(10);
//      delay_us(1);
//                  LED = ~LED;                   
//            F_GetWeight(Get_Weight());
                        if(Time1s==1)
                        {
                                Time1s=0;
                                Display(2);
                                i++;
                                SegDisplay();
//                                 LED_DATA=i;
//         LED = ~LED;
                                LED_DATA=Get_Weight();  //Get_Weight()   HX711_Read()
//                          rs485_transmit(lock_cont);
//        rs485_transmit(qian_Flag);                                  
                        }       
        }
}

#include "system.h"
#include "HX711.h"
#include "STC8xxxx.H"
#define   nAdjSize   34


float        HX711_Buffer        = 0;
float        Weight_Maopi        =        0;
float Weight_Shiwu        =        0;
unsigned long  nW_Max,nW_Min;
unsigned long  nWeight_Result;
unsigned long  xdata weight_[nAdjSize];   
//unsigned long  weight_;


/****************************************************
//读取HX711
****************************************************/
unsigned long HX711_Read(void) //增益128
{
        unsigned long count;
        unsigned char i;
        CZSDA=1;
        delay_us(2);
        CZSCK=0;
        count=0;
        while(CZSDA);
        for(i=0;i<24;i++)
        {
                CZSCK=1;
                delay_us(2);
                count=count<<1;
                CZSCK=0;
                delay_us(2);
                if(CZSDA)
                count++;
        }
                CZSCK=1;
          delay_us(2);
                CZSCK=0;
       
//                count=0x801021;  //4129
                count^=0x800000;//第25个脉冲下降沿时, 转换数据
          return(count);
}

/*获取毛皮质量*/
float Get_Maopi(void)
{
        int x;
        unsigned long  tmp = 0;
        unsigned long  nMin,nMax,dat;
        nMin = nMax = 0;
        for(x=0;x<10;x++)
        {
                dat = HX711_Read();
                if(x==0)
                {
                        nMin = nMax=dat;
                }
                else
                {
                        if(nMin>dat)
                        {
                                nMin=dat;
                        }
                        if(nMax<dat)
                        {
                                nMax=dat;
                        }
                }

                tmp+=dat;
        }

        tmp-=nMax;
        tmp-=nMin;
       
        HX711_Buffer = tmp/8; //HX711_Read();
        Weight_Maopi = HX711_Buffer/100;
        return Weight_Maopi;
}

float Get_Weight(void)
{
        unsigned long tmpa;
        HX711_Buffer        =        HX711_Read();  //HX711_Buffer        =        HX711_Read();
        HX711_Buffer        =        HX711_Buffer/100;
        if (HX711_Buffer > Weight_Maopi)
        {
                tmpa        =        HX711_Buffer;
                tmpa        =        tmpa        -        Weight_Maopi;
                //Weight_Shiwu = (Weight_Shiwu/4.439+0.02);               
                //计算实物的实际重量
                //因为不同的传感器特性曲线不一样,因此,每一个传感器需要矫正这里的4.30这个除数。
        }
        else
        {
                tmpa = 0;
        }
        return tmpa;
}

点评

缺失大量定义,直接打包上传完整工程  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:302
  • 最近打卡:2025-09-18 08:50:50
已绑定手机

82

主题

3126

回帖

6929

积分

荣誉版主

无情的代码机器

积分
6929
发表于 6 天前 | 显示全部楼层
Gugua*** 发表于 2025-9-12 09:53
#include "system.h"
#include "HX711.h"
#include "STC8xxxx.H"

缺失大量定义,直接打包上传完整工程
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:19
  • 最近打卡:2025-09-12 09:01:48
已绑定手机

2

主题

6

回帖

96

积分

注册会员

积分
96
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-9-12 10:00
缺失大量定义,直接打包上传完整工程

已经上传了全部程序文件,请查收!

谢谢!

截图202509121006413059.jpg
截图202509121007405846.jpg

电子称测试程序.7z

145.48 KB, 下载次数: 3

点评

此程序直接编译烧录,P35也是有输出的 [attachimg]114835[/attachimg]  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:302
  • 最近打卡:2025-09-18 08:50:50
已绑定手机

82

主题

3126

回帖

6929

积分

荣誉版主

无情的代码机器

积分
6929
发表于 6 天前 | 显示全部楼层
Gugua*** 发表于 2025-9-12 10:04
已经上传了全部程序文件,请查收!

谢谢!

此程序直接编译烧录,P35也是有输出的


截图202509121007539253.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-9-18 14:19 , Processed in 0.132783 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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