wpppmlah 发表于 2024-11-26 09:46:19

使用ISP中的"收到用户命令后复位到ISP监控程序区"时也只是单片机重启.失败.(已解决)

使用ISP中的"收到用户命令后复位到ISP监控程序区"时单片机会重启,然后又跑起了代码.只是重启,STCISP软件一直是在检测中.

工程环境:8H8K64U ,30MHZ,使用了stc_usb_cdc_8h_xdata.LIB 库实现的CDC,
请问这个是什么问题造成的? 单片机没有控制电源断电,电源是直通模式, 这一点不用考虑.
注:已选择上电复位使用较长延时
因为使用了官方USB库,所以不能直接使用官方默认的命令"@STCISP#",要使用一个自定义的命令("@ABCDEF#"),并在数据接收处理函数中加入自定义命令处理的过程

if(bUsbOutReady)
    {
      if(UsbOutBuffer=='@')
      {
            if(UsbOutBuffer=='A')
            {
                if(UsbOutBuffer=='B')
                {
                  if(UsbOutBuffer=='C')
                  {
                        if(UsbOutBuffer=='D')
                        {
                            if(UsbOutBuffer=='E')
                            {
                              if(UsbOutBuffer=='F')
                              {
                                    if(UsbOutBuffer=='#')
                                    {                                       
                                        USBCON = 0x00;      //清除USB设置
                                        USBCLK = 0x00;
                                        IRC48MCR = 0x00;

                                        P30 = 0;   //端口设置为低电平不然有概率不能复位成功
                                        P31 = 0;   //端口设置为低电平不然有概率不能复位成功                               
                                        delay_ms(100);//加个延时
                                        IAP_CONTR = 0x60;                     //复位到系统区 不管P32的状态,                                                                                                                                                         
                                     }
                              }
                            }
                        }
                  }
                }
            }
      }
      usb_OUT_done();
}









DebugLab 发表于 2024-11-26 10:03:08

复位到ISP监控程序区
IAP_CONTR=0x60

wpppmlah 发表于 2024-11-26 13:50:12

STCISP 点击 下载按钮后,用硬件按钮进行ISP复位::::::依然不行.
当KEY(P32)按下时holdkey_time计时变量在定时器中断中进行计时;当到达时间后,使用软件复位 IAP_CONTR = 0x60;//复位到系统区. 结果单片机只是重启后又跑起了代码.
while(!KEY)
            {
                if(holdkey_time>=20)
                {
                   //有没有这三句,结果一样↓
                   USBCON = 0x00;      //清除USB设置
                  USBCLK = 0x00;
                  IRC48MCR = 0x00;
               //有没有这三句,结果一样↑

                  delay_ms(10);                           //检测到正确的命令序列后复位到系统区,此处的延时可省去
                  IAP_CONTR = 0x60;                     //复位到系统区
                  while (1);
                }
            }
            holdkey_time = 0;

wpppmlah 发表于 2025-1-17 14:50:26



手册中也是这样给出的用法,为什么就是不行呢,单片机只是重启.

Lkck8210 发表于 2025-1-17 16:32:59

用什么板子?

wpppmlah 发表于 2025-3-26 09:17:01

手动复位到系统区(按键是P32,代码中检测长按P32),添加了P30 P31置0后,使MCU重启时P30 P31 P32为低电平,符合手册中的提示,,,,,,可以正常使用了,,,,软件复位到系统区的还没有找到更可靠的办法




页: [1]
查看完整版本: 使用ISP中的"收到用户命令后复位到ISP监控程序区"时也只是单片机重启.失败.(已解决)