平一帆 发表于 2025-3-24 19:00:01

求助大神,debug问题,能够进入debug界面,但是运行几步就报错退出

求大神解答debug的问题,两块板子都是STC8G1K08的单片机,每一个都能进入debug界面,但是都不能正常debug。

第一块板子出现这个情况,运行第一句就直接报错如图所示:



第二个块板子,能debug前几步,到EA=1;这一句就弹出图示的错误

求大神解惑,谢谢

国芯人工智能 发表于 2025-3-24 19:03:00

在针对STC8G1K08单片机的调试过程中,遇到能够进入Debug界面但无法正常执行调试的问题,可能涉及多个方面的原因。以下是对该问题的详细分析与建议:

1. 硬件连接与电源稳定性
首先,确保调试器与目标板的连接正确无误,包括电源、地线、调试信号线(如SWD或JTAG)等。电源不稳定或电压不足可能导致单片机在调试过程中异常。建议使用示波器检查电源电压是否在单片机的工作范围内,并确保电源滤波电容正常工作。

2. 调试器配置与固件版本
调试器的配置错误或固件版本不兼容也可能导致调试失败。请确认调试器支持STC8G1K08单片机,并检查调试器的固件是否为最新版本。此外,调试器的配置参数(如时钟频率、调试模式等)应与单片机实际使用的一致。

3. 单片机初始化代码
在调试过程中,单片机的初始化代码(如时钟配置、外设初始化等)必须在调试开始前正确执行。如果初始化代码存在问题,可能导致单片机在调试过程中无法正常工作。建议检查初始化代码,确保所有必要的配置都已正确设置。

4. 中断与异常处理
在调试过程中,如果单片机发生中断或异常,可能导致调试失败。请检查中断向量表是否正确配置,并确保中断服务程序(ISR)能够正确处理中断事件。此外,调试器可能无法正确处理某些异常(如非法指令、访问错误等),建议在代码中加入异常处理机制。

5. 调试信息与错误代码
根据您提供的错误代码(89341、89342、89343),这些代码可能与调试器的内部错误或单片机的特定状态有关。建议查阅调试器的用户手册或STC8G1K08的技术文档,了解这些错误代码的具体含义,并采取相应的解决措施。

6. 软件环境与工具链
确保使用的集成开发环境(IDE)和编译器工具链支持STC8G1K08单片机,并且版本为最新。某些旧版本的IDE或编译器可能存在兼容性问题,导致调试失败。建议使用官方推荐的开发工具,并保持工具链的更新。

7. 硬件复位与调试模式
在调试过程中,硬件复位或调试模式的切换可能导致调试失败。请确保在调试开始前,单片机已正确进入调试模式,并且在调试过程中不会发生意外的硬件复位。

8. 代码优化与调试符号
如果代码在编译时启用了优化选项,可能导致调试信息不准确或丢失。建议在调试时禁用代码优化,并确保调试符号(如变量、函数名等)已正确生成。

9. 调试器与单片机的兼容性
某些调试器可能与特定型号的单片机存在兼容性问题。建议尝试使用其他型号的调试器,或联系调试器厂商获取技术支持。

10. 硬件故障与元件损坏
最后,如果上述方法均无法解决问题,可能存在硬件故障或元件损坏。建议使用万用表或逻辑分析仪检查目标板的各个关键元件,确保其正常工作。

综上所述,针对STC8G1K08单片机的调试问题,建议从硬件连接、调试器配置、初始化代码、中断处理、错误代码解读、软件环境、硬件复位、代码优化、调试器兼容性以及硬件故障等多个方面进行排查。通过系统性的分析与测试,应能够找到问题的根本原因并予以解决。

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

王昱顺 发表于 2025-3-24 19:14:15

需要注意的是,debug过程中,不能占用仿真使用的外设,和操作仿真所使用的IO模式
例如串口仿真不可以再操作仿真占用的串口,否则就会导致仿真被挤掉退出

平一帆 发表于 2025-3-24 19:46:20

王昱顺 发表于 2025-3-24 19:14
需要注意的是,debug过程中,不能占用仿真使用的外设,和操作仿真所使用的IO模式
例如串口仿真不可以再操作 ...

您好,仿真的口是P3.1和P3.0,我代码里没有配置和动用这两个口,您看这样是不是就不会占用仿真的这两个口了?您看还有别的导致这个问题的可能吗?

王昱顺 发表于 2025-3-24 20:34:41

平一帆 发表于 2025-3-24 19:46
您好,仿真的口是P3.1和P3.0,我代码里没有配置和动用这两个口,您看这样是不是就不会占用仿真的这两个口 ...



这里还是改动了
P30和P31的IO模式都不要修改,不然也会引起操作IO口造成仿真失败

平一帆 发表于 2025-3-25 10:22:33

王昱顺 发表于 2025-3-24 20:34
这里还是改动了
P30和P31的IO模式都不要修改,不然也会引起操作IO口造成仿真失败
...

您好,我把P3.1和P3.0相关的代码都删除了,但还是从上到下一运行EA=1;这一句就显示图示的错误了,您看有啥别的原因嘛?

王昱顺 发表于 2025-3-25 10:55:51

平一帆 发表于 2025-3-25 10:22
您好,我把P3.1和P3.0相关的代码都删除了,但还是从上到下一运行EA=1;这一句就显示图示的错误了,您看有 ...

那需要看一下是否串口操作中,是否出现了对寄存器直接赋值的情况
有一些寄存器是串口1,串口2共用的,如果出现直接赋值,可能会修改掉串口1的部分,就会导致执行出现问题了

平一帆 发表于 2025-3-25 11:12:20

王昱顺 发表于 2025-3-25 10:55
那需要看一下是否串口操作中,是否出现了对寄存器直接赋值的情况
有一些寄存器是串口1,串口2共用的,如 ...

您好,下面是我的写的,我是初学者我找了半天好像没有找到您说的串口1和串口2共用的寄存器,也可能是我学的不好没有找到,您能再给些建议嘛?非常感谢

#include "Config.h"
#include "STC8H.h"
#include "Manchester.h"
#include "STC8G_H_GPIO.h"
#include        "STC8G_H_UART.h"
#include        "STC8G_H_Delay.h"
#include        "STC8G_H_NVIC.h"
#include        "STC8G_H_Switch.h"

/***************配置IO *****************/
void        GPIO_config(void)
{
        GPIO_InitTypeDef        GPIO_InitStructure;                //结构定义
        GPIO_InitStructure.Pin= GPIO_Pin_2;               
        GPIO_InitStructure.Mode = GPIO_OUT_PP;               
        GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);        //初始化

        GPIO_InitStructure.Pin= GPIO_Pin_0 | GPIO_Pin_1;               
        GPIO_InitStructure.Mode = GPIO_PullUp;       
        GPIO_Inilize(GPIO_P1,&GPIO_InitStructure);        //初始化
       
}

/***************串口初始化函数 *****************/
void        UART_config(void)
{
        COMx_InitDefine                COMx_InitStructure;                                        //结构定义

        COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;       
        COMx_InitStructure.UART_BaudRate= 115200ul;                       
        COMx_InitStructure.UART_RxEnable= ENABLE;                               
        UART_Configuration(UART2, &COMx_InitStructure);               
        NVIC_UART2_Init(ENABLE,Priority_1);               
        UART2_SW(UART2_SW_P10_P11);               
}


/*****************主函数*****************/
void main()
{
       
        u8        i;
      u8 byte1, byte2;// 用于存储接收到的两个字节
        u8 eff_data;// 数据字节
        u8 checksum;// 校验字节
        EA=1;
        EAXSFR();                /* 扩展寄存器访问使能 */
        GPIO_config();
        UART_config();
       
        while(1)
        {
                delay_ms(1);
                if(COM2.RX_TimeOut > 0)                //超时计数
                {
                        if(--COM2.RX_TimeOut == 0)
                        {
                                if(COM2.RX_Cnt >0)
                                {
                                       
                                   byte1 = RX2_Buffer;// 获取帧头字节
                                 byte2 = RX2_Buffer;// 获取数据字节
                                       
                                       // 获取数据字节
                                       for (i = 2; i < 8; i++)
                                        {
                                          eff_data = RX2_Buffer;
                                        }
                                       
                                        // 获取校验字节
                                       checksum = RX2_Buffer;
                                       
                                       // 发送帧头字节
                                       sendManchesterData(byte1);
                                       sendManchesterData(byte2);
                                       
                                       // 发送后6位数据字节
                                       for (i = 2; i < 8; i++)
                                       {
                                             sendManchesterData(eff_data);
                                       }


                                }
                                COM2.RX_Cnt = 0;
                        }
                               
                }
        }               
}

王昱顺 发表于 2025-3-25 11:34:46

平一帆 发表于 2025-3-25 11:12
您好,下面是我的写的,我是初学者我找了半天好像没有找到您说的串口1和串口2共用的寄存器,也可能是我学 ...

方便发一下完整的工程吗,我测试一下是否可以正常仿真

平一帆 发表于 2025-3-25 14:49:46

王昱顺 发表于 2025-3-25 11:34
方便发一下完整的工程吗,我测试一下是否可以正常仿真

那再感激不过了,我发给您我的工程,里面还有我拿到的下载器手册,我是按照这个手册里的第26页开始进行配置的,麻烦您了十分感谢。
页: [1] 2
查看完整版本: 求助大神,debug问题,能够进入debug界面,但是运行几步就报错退出