找回密码
 立即注册
查看: 139|回复: 9

STC8H1K08单片机P3.7端口上电过程中出现高电平脉冲

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-02 06:51:19
已绑定手机

1

主题

5

回帖

71

积分

注册会员

积分
71
发表于 4 天前 | 显示全部楼层 |阅读模式
       公司某款产品使用STC8H1K08-36I-QFN20型号单片机作为主控制器,产品调试过程中发现如下问题,P3.7端口在上电过程中出现高电平脉冲,最高幅值0.7V左右。更换该款产品的其他电路测试问题依然存在,于是更换使用该型号单片机的另外一款产品测试,问题也依然存在。测试过程中测试了单片机的其他引脚不存在此问题。
      1. 硬件电路详见附件。
      2. GPIO初始化程序如下:
      
  1. #include  "GPIO_Init.h"
  2. #include  "delay.h"
  3. void GPIO_Init(void)
  4. {
  5.         GPIO_InitTypeDef        GPIO_InitStructure;
  6.         // P1.0,P1.2,P1.3 -> NC                                                        推挽输出,上电默认输出低电平
  7.         // P1.1 -> CTRL_5VS2                                                                 推挽输出,上电默认输出低电平
  8.         // P1.4 -> SW_SIGNAL                                                                浮空输入
  9.         // P1.5 -> HEAD_SWITCH                                                        浮空输入
  10.         // P1.6 -> PROXIMITY_RX                                                        浮空输入
  11.         // P1.7 -> CH_CTRL                                                                        推挽输出,上电默认输出高电平
  12.         P1 &= 0x70;
  13.         P1 |= 0x80;                                                                                                        // 上电后通道开关切换到近炸输入引脚
  14.         GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_7;               
  15.         GPIO_InitStructure.Mode = GPIO_OUT_PP;               
  16.         GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);
  17.         GPIO_InitStructure.Pin  = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;        
  18.         GPIO_InitStructure.Mode = GPIO_HighZ;
  19.         GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);
  20.         // P3.0 -> CMD_RX                                                                                 上拉准双向口
  21.         // P3.1 -> CMT_TX                                                                                 上拉准双向口
  22.         // P3.2,P3.4,P3.6 -> NC                  推挽输出,上电默认输出低电平
  23.         // P3.3 -> CTRL_REMOTE_PWR                                         推挽输出,上电默认输出低电平
  24.         // P3.5 -> CTRL_ARMING                                                        推挽输出,上电默认输出低电平
  25.         // P3.7 -> CTRL_FIRE                                                                推挽输出,上电默认输出低电平        
  26.         P3 &= 0x03;
  27.         GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1;
  28.         GPIO_InitStructure.Mode = GPIO_PullUp;
  29.         GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
  30.         GPIO_InitStructure.Pin  = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_6 | GPIO_Pin_7;               
  31.         GPIO_InitStructure.Mode = GPIO_OUT_PP;               
  32.         GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
  33.         
  34.         // P5.4 -> NC                                                                                                推挽输出,上电默认输出高电平
  35.         // P5 &= 0xEF;
  36.         GPIO_InitStructure.Pin  = GPIO_Pin_4;               
  37.         GPIO_InitStructure.Mode = GPIO_OUT_PP;               
  38.         GPIO_Inilize(GPIO_P5,&GPIO_InitStructure);
  39. }
复制代码
     3. 测试波形如下:(蓝色P3.7端口,绿色VDD:3.3V)
      
      4. PCB 不见布线如下:

scope_0.bmp
BOT.png
GND.png
PWR.png
TOP.png

ControlBoard _ ControlBoard.pdf

67.81 KB, 下载次数: 5

硬件电路

回复

使用道具 举报 送花

3

主题

1928

回帖

704

积分

等待验证会员

积分
704
发表于 4 天前 | 显示全部楼层
关于STC8H1K08单片机P3.7端口在上电过程中出现高电平脉冲问题的分析与建议

尊敬的工程师:

您好!感谢您分享在产品调试过程中遇到的技术问题。针对您描述的STC8H1K08-36I-QFN20单片机P3.7端口在上电过程中出现约0.7V高电平脉冲的现象,结合您提供的硬件电路信息和GPIO初始化代码片段,我们从硬件设计、电源上电时序、IO口初始化配置、PCB布局以及芯片内部结构等多个维度进行了分析,并提出相应的排查建议和解决方案。

一、问题现象回顾

1. 问题描述:
使用STC8H1K08-36I-QFN20单片机作为主控。
P3.7端口在系统上电过程中出现幅值约0.7V的高电平脉冲。
更换多块电路板及使用该型号单片机的其他产品均出现相同问题。
其他引脚未发现类似现象。

2. 初步判断:
排除了个别电路板或单片机个体问题的可能性。
现象具有重复性和一致性,表明问题可能与硬件设计、软件配置或芯片特性相关。

二、可能原因分析

1. 上电时序与复位不完整
单片机在上电过程中,VCC电源可能未完全稳定,导致内部逻辑尚未完全初始化。
复位信号(如外部复位电路或内部复位)未能有效延迟到电源稳定后再释放。
在复位信号释放前,某些IO口可能处于高阻态或随机状态,造成短暂的高电平脉冲。

2. IO口默认状态配置不当
STC8H系列单片机在复位后,默认的IO口状态可能为高阻输入或弱上拉状态。
如果P3.7未在初始化代码中被及时配置为推挽输出并置低,可能会因外部干扰或内部上拉电阻导致短暂高电平。
从提供的代码片段看,P3.7未出现在初始化列表中,需确认是否遗漏配置。

3. 外部电路影响
若P3.7连接有外部电路(如MOS管栅极、LED、电容等),在上电瞬间可能形成瞬态电流路径。
PCB布局中若存在较大的寄生电容或感性负载,也可能引起瞬态电压波动。
若P3.7用于控制外部电源或开关电路,该脉冲可能影响下游电路工作。

4. 电源稳定性与去耦设计
VCC电源纹波或噪声可能影响IO口的输出状态。
去耦电容布局不合理或容量不足,可能导致电源上电不稳定,从而影响IO行为。

三、建议排查步骤

1. 检查GPIO初始化代码
确认P3.7是否在初始化过程中被正确配置为推挽输出,并在初始化阶段置低。
建议在系统启动初期(main函数开始)就对所有未使用的IO口进行初始化,避免其处于不确定状态。
示例代码建议:

```c
void GPIOInit(void)
{
    // 其他GPIO配置...

    // 配置P3.7为推挽输出,默认输出低电平
    GPIOP3M0 |= (1

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:525
  • 最近打卡:2025-10-01 17:38:30
已绑定手机

46

主题

2246

回帖

7894

积分

论坛元老

积分
7894
发表于 4 天前 | 显示全部楼层
将P3.7的外围元器件都断开,然后加一个下拉电阻试试。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:574
  • 最近打卡:2025-09-30 07:17:25
已绑定手机

86

主题

6208

回帖

1万

积分

超级版主

积分
11566
发表于 4 天前 | 显示全部楼层
IO默认为1,初始化要先设置IO为0,再设置为推挽模式(作为输出)
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-02 06:51:19
已绑定手机

1

主题

5

回帖

71

积分

注册会员

积分
71
发表于 4 天前 | 显示全部楼层
乘风*** 发表于 2025-9-29 11:06
将P3.7的外围元器件都断开,然后加一个下拉电阻试试。

已经将电路板其余器件都焊接掉,只保留单片机,外部线性稳压电源供电,问题依然存在。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-02 06:51:19
已绑定手机

1

主题

5

回帖

71

积分

注册会员

积分
71
发表于 4 天前 | 显示全部楼层
Debu*** 发表于 2025-9-29 14:09
IO默认为1,初始化要先设置IO为0,再设置为推挽模式(作为输出)

程序是先将IO设置为0,然后置为推挽输出的。
  1.         P3 &= 0x03;
  2.         GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1;
  3.         GPIO_InitStructure.Mode = GPIO_PullUp;
  4.         GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
  5.         GPIO_InitStructure.Pin  = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_6 | GPIO_Pin_7;               
  6.         GPIO_InitStructure.Mode = GPIO_OUT_PP;               
  7.         GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
复制代码
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-02 06:51:19
已绑定手机

1

主题

5

回帖

71

积分

注册会员

积分
71
发表于 4 天前 | 显示全部楼层
国芯人*** 发表于 2025-9-29 10:43
关于STC8H1K08单片机P3.7端口在上电过程中出现高电平脉冲问题的分析与建议

尊敬的工程师:

按照您所说的,我这边做了如下测试:

1. 外部电路影响:
用热风枪取下除单片机意外的其他器件,外部使用线性稳压电源供电,供电瞬间问题依然存在。
2. 关于GPIO初始化代码的配置:
主程序:
  1. void main(void)
  2. {
  3.         EAXSFR();                                                                                //ʹÄÜ·ÃÎÊXFR
  4.         InternalXdata_Enable();
  5.         GPIO_Init();
  6.         USART_Init();
  7.         // Timer0_Init();                                                // ÎÞ×Ô»Ù
  8.         PWMA_Init();
  9.         PWMB_Init();
  10.         EA        = 1;
  11.         SystemRunState = WAIT_ARMING_CMD_STATE;
  12.         while(1)
复制代码
GPIO初始化程序:
  1. void GPIO_Init(void)
  2. {
  3.         GPIO_InitTypeDef        GPIO_InitStructure;
  4.         // P1.0,P1.2,P1.3 -> NC                                                        ÍÆÍìÊä³ö£¬ÉϵçĬÈÏÊä³öµÍµçƽ
  5.         // P1.1 -> CTRL_ARMING                                                        ÍÆÍìÊä³ö£¬ÉϵçĬÈÏÊä³öµÍµçƽ
  6.         // P1.4 -> CTRL_REMOTE_PWR                                        ÍÆÍìÊä³ö£¬ÉϵçĬÈÏÊä³öµÍµçƽ
  7.         // P1.5 -> CH_CTRL                                                                        ÍÆÍìÊä³ö£¬ÉϵçĬÈÏÊä³ö¸ßµçƽ
  8.         // P1.6 -> PROXIMITY_RX                                                        ¸¡¿ÕÊäÈë
  9.         // P1.7 -> HEAD_SWITCH                                                        ¸¡¿ÕÊäÈë
  10.         P1 &= 0xE0;
  11.         P1 |= 0x20;                                                                                                        // ÉϵçºóͨµÀ¿ª¹ØÇл»µ½½üÕ¨ÊäÈëÒý½Å
  12.         GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;               
  13.         GPIO_InitStructure.Mode = GPIO_OUT_PP;               
  14.         GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);
  15.         GPIO_InitStructure.Pin  = GPIO_Pin_6 | GPIO_Pin_7;       
  16.         GPIO_InitStructure.Mode = GPIO_HighZ;
  17.         GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);
  18.         // P3.0 -> CMD_RX                                                                                 ÉÏÀ­×¼Ë«Ïò¿Ú
  19.         // P3.1 -> CMT_TX                                                                                 ÉÏÀ­×¼Ë«Ïò¿Ú
  20.         // P3.2,P3.3£¬P3.6 -> NC                  ÍÆÍìÊä³ö£¬ÉϵçĬÈÏÊä³öµÍµçƽ
  21.         // P3.4 -> CTRL_5VS2                                                                 ÍÆÍìÊä³ö£¬ÉϵçĬÈÏÊä³öµÍµçƽ
  22.         // P3.5 -> SW_SIGNAL                                                                ¸¡¿ÕÊäÈë
  23.         // P3.7 -> CTRL_FIRE                                                                ÍÆÍìÊä³ö£¬ÉϵçĬÈÏÊä³öµÍµçƽ       
  24.         P3 &= 0x23;
  25.         GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1;
  26.         GPIO_InitStructure.Mode = GPIO_PullUp;
  27.         GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
  28.         GPIO_InitStructure.Pin  = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_6 | GPIO_Pin_7;               
  29.         GPIO_InitStructure.Mode = GPIO_OUT_PP;               
  30.         GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
  31.         GPIO_InitStructure.Pin  = GPIO_Pin_5;       
  32.         GPIO_InitStructure.Mode = GPIO_HighZ;
  33.         GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);
  34.        
  35.         // P5.4 -> NC                                                                                                ÍÆÍìÊä³ö£¬ÉϵçĬÈÏÊä³ö¸ßµçƽ
  36.         // P5 &= 0xEF;
  37.         GPIO_InitStructure.Pin  = GPIO_Pin_4;               
  38.         GPIO_InitStructure.Mode = GPIO_OUT_PP;               
  39.         GPIO_Inilize(GPIO_P5,&GPIO_InitStructure);
  40. }
复制代码
P3端口除P3.0 P3.1外,其余端口按位与0,然后设置为推挽输出模式。

3039ba15c58a8bffb6e0ad4c5d8bfd7b.jpg
26864253fe011535f56a9218bb1f44c7.jpg
scope_1.bmp
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:511
  • 最近打卡:2025-10-02 23:17:29

9

主题

461

回帖

3245

积分

论坛元老

积分
3245
发表于 4 天前 | 显示全部楼层
测试了下手头的STC8H1K08 TSSOP20封装.
,没写程序,只在rom区开头填了几个0x00,相当于无程序落跑,以避开用户代码的影响.
确实上电时在P3.7脚有尖脉冲输出.加下拉电阻可以显著缩短脉冲宽度到几个us样子,但无法彻底消除.
截图202509291958307576.jpg
截图202509291958438350.jpg
截图202509291959456689.jpg
截图202509292000031468.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-10-02 06:51:19
已绑定手机

1

主题

5

回帖

71

积分

注册会员

积分
71
发表于 3 天前 | 显示全部楼层
网*** 发表于 2025-9-29 20:02
测试了下手头的STC8H1K08 TSSOP20封装.
,没写程序,只在rom区开头填了几个0x00,相当于无程序落跑,以避开用户 ...

感谢您百忙之中抽空帮忙测试,谢谢了!我这边测试了两个产品都存在这样的问题,而别的引脚却没有这个脉冲,再加上您的测试结果可以肯定是芯片本身的问题。希望STC厂家能帮忙测试分析下是什么原因导致的这个现象,我这边的客户还在等我的分析报告
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2025-10-03 08:16:58
已绑定手机

19

主题

75

回帖

955

积分

高级会员

积分
955
发表于 前天 15:16 | 显示全部楼层
有点久有点嘛,有影响就换个脚。
之前有个好像是15W408还是哪个型号的LQFP44的,也是有个脚上电就会有个下拉的脉冲输出,这导致继电器会跳一下。
后来没办法就把这个脚和另外一个接LED指示灯的脚交换了一下。上电闪那么一下,无伤大雅。
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-3 08:52 , Processed in 0.155695 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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