找回密码
 立即注册
查看: 110|回复: 5

8H1K17 RST 设置为普通IO 不能正常工作

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-17 09:16:42
已绑定手机

1

主题

2

回帖

31

积分

新手上路

积分
31
发表于 2025-3-10 13:31:14 | 显示全部楼层 |阅读模式
8H1K17 RST 设置为普通IO  在while 前不能正常控制  IO电平翻转。 while 循环中,可以控制。代码如下:
void GIPO_Config(void)
{
        BUZZ = 1;
        
        Relay = 0;
        
        P1M0 = 0xc0; P1M1 = 0x00;
    P1PU = 0xc0;
        
//        P1M0 = 0xe4; P1M1 = 0x00;
//  P1PU = 0xe4;


        P3M0 = 0x70; P3M1 = 0x00;
    P3PU = 0x00;

        P5M0 = 0x10; P5M1 = 0xef;
    P5PU = 0x00;

}


void Timer0_init(void)
{
        AUXR |= 0x80;                        //定时器时钟1T模式
        TMOD &= 0xF0;                        //设置定时器模式
//        TL0 = 0xCD;                                //设置定时初始值  1ms
//        TH0 = 0xD4;                                //设置定时初始值
        TL0 = 0x9A;                                //设置定时初始值  2ms
        TH0 = 0xA9;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
    ET0 = 1;                //使能定时器中断
//    EA = 1;
}

void System_init(void)
{
        GIPO_Config();
         
        RC52X_Init();
        RC52X_Reset();
        
        Timer0_init();
        
//        INT1_Init();
        
#ifdef Dubeg
        UartInit();
#endif
        
//        INT2_Init();
#ifndef Dubeg
        WDT_CONTR = 0x24;                           //使能看门狗,溢出时间约为1s
#endif
        EA = 1;
}

unsigned char IapRead(unsigned int addr)
{
    unsigned char dat;
    IAP_CONTR = 0x80;                           //使能IAP
    IAP_TPS = 12;                               //设置等待参数11.0592MHz
    IAP_CMD = 1;                                //设置IAP读命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
        F0 = EA;
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();
        EA = F0;
    dat = IAP_DATA;                             //读IAP数据
    IapIdle();                                  //关闭IAP功能

    return dat;
}


u8  Read_EquipmentAddr(u8 * tempValue)
{
        //u8 tempValue[4];

        tempValue[0] = IapRead( UserID_address + 0);
        tempValue[1] = IapRead( UserID_address + 1);
        tempValue[2] = IapRead( UserID_address + 2);
        tempValue[3] = IapRead( UserID_address + 3);
        return 0;
}



void main(void)
{
        //u8 temp[4];
        System_init();
        
        Read_EquipmentAddr(UserID);
        SetUserID_state = 0;
        
        
//#ifndef Dubeg        
//        WDT_CONTR = 0x34;                       //清看门狗,否则系统复位
//#endif
        
        
        //Uart2SendStr("Uart Test !\r\n");
#ifdef Dubeg        
        Uart2SendStr(UserID,4);
#endif
        BUZZ = 0;
        delay_ms(200);
        BUZZ = 1;
        delay_ms(500);
        BUZZ = 0;
        delay_ms(200);
        BUZZ = 1;
#ifndef Dubeg        
        WDT_CONTR = 0x34;                       //清看门狗,否则系统复位
#endif

        while (1)
        {
                Comm_Event_Proc();
               
                if(BUZZ_state == 1)
                {
                        BUZZ = 0;
                        delay_ms(250);
                        BUZZ = 1;
                        delay_ms(500);
#ifndef Dubeg        
        WDT_CONTR = 0x34;                       //清看门狗,否则系统复位
#endif
                        BUZZ = 0;
                        delay_ms(250);
                        BUZZ = 1;
                        delay_ms(500);
#ifndef Dubeg        
        WDT_CONTR = 0x34;                       //清看门狗,否则系统复位
#endif
                        BUZZ = 0;
                        delay_ms(250);
                        BUZZ = 1;
                        BUZZ_state = 0;
#ifndef Dubeg        
        WDT_CONTR = 0x34;                       //清看门狗,否则系统复位
#endif
                }
        }
}
回复

使用道具 举报 送花

3

主题

1094

回帖

899

积分

等待验证会员

积分
899
发表于 2025-3-10 13:33:00 | 显示全部楼层
在STC8H1K17微控制器中,RST引脚默认作为复位引脚使用。若要将其配置为普通IO引脚,需确保在初始化阶段正确设置相关寄存器。根据您提供的代码,P1M0和P1M1寄存器用于配置P1端口的模式,P1PU用于配置上拉电阻。然而,RST引脚的特殊功能可能未完全解除,导致在`while`循环前无法正常控制IO电平翻转。<br><br>建议在`GIPO_Config`函数中,明确将RST引脚配置为普通IO模式,并确保在系统初始化时完成此设置。同时,检查是否有其他寄存器或硬件配置影响了RST引脚的行为。例如,确认`RSTCFG`寄存器中RST引脚的功能选择位已正确配置为普通IO模式。此外,确保在`while`循环前有足够的延时,以等待引脚状态稳定。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-05-12 09:01:08
已绑定手机

77

主题

4900

回帖

8564

积分

超级版主

DebugLab

积分
8564
发表于 2025-3-10 14:23:00 | 显示全部楼层
检查RSTCFG寄存器和IO模式

有问题的时候直接设置寄存器,#ifdef和看门狗都不要用,先排除一下这些问题,问题解决了再逐一还原
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:463
  • 最近打卡:2025-05-12 08:51:05
已绑定手机

13

主题

1284

回帖

3069

积分

论坛元老

积分
3069
发表于 2025-3-11 16:00:29 | 显示全部楼层
楼主的情况应该是ISP软件中禁用RST复位功能,代码中没有操作过RSTCFG寄存器使能P54的RST功能。

同时,楼主的代码中也没看到控制P54电平翻转的代码呀
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-17 09:16:42
已绑定手机

1

主题

2

回帖

31

积分

新手上路

积分
31
发表于 2025-3-17 09:16:42 | 显示全部楼层
Debu*** 发表于 2025-3-10 14:23
检查RSTCFG寄存器和IO模式

有问题的时候直接设置寄存器,#ifdef和看门狗都不要用,先排除一下这些问题,问 ...

需要在代码中设置 RSTCFG  将RST 设置成普通IO
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-03-17 09:16:42
已绑定手机

1

主题

2

回帖

31

积分

新手上路

积分
31
发表于 2025-3-17 09:17:16 | 显示全部楼层
21cns*** 发表于 2025-3-11 16:00
楼主的情况应该是ISP软件中禁用RST复位功能,代码中没有操作过RSTCFG寄存器使能P54的RST功能。

同时,楼主 ...

需要在代码中设置 RSTCFG  将RST 设置成普通IO
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-13 07:42 , Processed in 0.135988 second(s), 83 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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