8G1K08,配置了P3.5为推挽输出P3.6为高阻态输入,P3.6正常但P3.5无输出
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 longnW_Max,nW_Min;
unsigned longnWeight_Result;
unsigned longxdata weight_;
//unsigned longweight_;
/****************************************************
//读取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 longtmp = 0;
unsigned longnMin,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;
}
关于STC8G1K08芯片P35引脚配置为推挽输出无输出的问题分析与建议
尊敬的开发者:
您好!针对您反馈的STC8G1K08芯片在配置P35为推挽输出时无法输出信号的问题,我们进行了初步分析并提出以下排查建议。
一、问题现象
1. P35配置为推挽输出模式
2. P36配置为高阻态输入模式
3. 实际测试发现:
P36工作正常(验证配置有效性)
P35无预期输出信号
二、配置验证建议
1. 端口初始化检查
建议重点检查以下配置寄存器设置:
c
P3M1 = 0x00;// 设置P3口为推挽输出
P3M0 = 0xFF;
需确认:
P3M1和P3M0寄存器配置是否正确
是否存在后续配置覆盖情况
是否在中断或DMA操作中被意外修改
2. 硬件连接检查
测量P35对地电阻值(正常应为高阻态)
检查PCB是否存在短路/虚焊
验证电源供电稳定性(特别是VCC波动可能影响IO驱动能力)
三、特殊功能复用排查
1. 外设功能冲突
检查是否启用了P35复用功能(如UART、SPI等),可通过以下寄存器确认:
c
P3ASF = 0x00; // 设置为通用IO口
2. 全局中断配置
若使用了中断服务程序,建议检查:
中断优先级配置
中断服务程序是否异常
是否存在堆栈溢出风险
四、代码优化建议
根据提供的代码片段,建议改进以下方面:
1. 变量定义优化
c
// 建议增加volatile修饰符
volatile float HX711Buffer = 0;
volatile float WeightMaopi = 0;
volatile float WeightShiwu = 0;
// 建议增加初始化
unsigned long nWMax = 0, nWMin = 0;
unsigned long nWeightResult = 0;
unsigned long xdata weight = {0};
2. 延时函数规范
建议使用标准延时函数:
c
include "intrins.h"
void delayus(unsigned int us) {
while(us--) {
nop();
}
}
五、硬件特性注意事项
1. 驱动能力限制
STC8G系列IO口最大灌电流12mA
需注意负载匹配(建议串接限流电阻)
2. 上电时序要求
复位电路需满足最小复位脉宽要求
建议增加上电延时初始化
六、典型问题排查流程
1. 最小系统验证
使用P33等其他IO进行对比测试
搭建最小验证程序:
c
void main() {
P3M1 = 0x00;
P3M0 = 0xFF;
while(1) {
P35 = 1;
delayms(500);
P35 = 0;
delayms(500);
}
}
2. 示波器测量要点
测量P35实际波形而非万用表电压
检查信号完整性(过冲/振铃)
测量时钟源稳定性
七、技术支持准备
建议提供以下信息以便进一步分析:
1. 完整工程代码(含头文件)
2. 硬件原理图(重点关注IO外围电路)
3. 实际测量波形截图
4. 使用的开发环境版本信息
我们建议按照上述步骤进行系统性排查。若仍无法解决问题,欢迎通过官方技术支持渠道提交完整问题描述,我们的工程师将为您提供进一步的技术支持。
祝开发顺利!
国芯人工智能技术团队
2023年X月X日
(注:本文基于公开技术资料整理,具体问题需结合实际应用场景分析)
[本文内容由国芯人工智能辅助生成,仅供参考] 直接烧录附件例子里的hex文件到芯片里试试
如果P35还是没有输出的话,将P35外围电路断开,并排查是否有虚焊或者短路。 此类问题先用最简代码测一下:
#include <STC8G.H>
#include <def.H>
void Delay500ms(void) //@11.0592MHz
{
unsigned char data i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
P_SW2 |= 0x80;
P3M0 = 0x20; P3M1 = 0x00;
while(1){
P35 = ~P35;
Delay500ms();
};
}
1、关于驱动能力的问题这个问题不存在,因为p3.5是用来做时钟驱动
2、关于推挽配置也是按STC官方烧录软件提供的配置小程序输入相关信息配置方法进行的配置(附图是详细的配置截图)
3、无波形输出是用示波器测量的也不是用万用表测试的
4、单独进行测试p3.5口的推挽输出是正常的(有波形输出)
Guguanghui 发表于 2025-9-12 09:38
1、关于驱动能力的问题这个问题不存在,因为p3.5是用来做时钟驱动
2、关于推挽配置也是按STC官方烧录软件提 ...
使用楼上代码测试或上传可复现问题最简程序看看 ercircle 发表于 2025-9-12 09:46
使用楼上代码测试或上传可复现问题最简程序看看
#include "system.h"
#include "HX711.h"
#include "STC8xxxx.H"
u8AA={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;
// suoset=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 longnW_Max,nW_Min;
unsigned longnWeight_Result;
unsigned longxdata weight_;
//unsigned longweight_;
/****************************************************
//读取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 longtmp = 0;
unsigned longnMin,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;
}
Guguanghui 发表于 2025-9-12 09:53
#include "system.h"
#include "HX711.h"
#include "STC8xxxx.H"
缺失大量定义,直接打包上传完整工程 ercircle 发表于 2025-9-12 10:00
缺失大量定义,直接打包上传完整工程
已经上传了全部程序文件,请查收!
谢谢!
Guguanghui 发表于 2025-9-12 10:04
已经上传了全部程序文件,请查收!
谢谢!
此程序直接编译烧录,P35也是有输出的
页:
[1]
2