Simiguy 发表于 2025-4-16 05:48:03

开天斧《-22-基于HID协议的USB鼠标范例》调试停留在while (!(IRC48MCR & 0x01));处

使用开天斧板子,将调试管脚设置为P3.6,P3.7,因为要使用USB功能。 打开样例程序,运行停留在while (!(IRC48MCR & 0x01));处。 如果将生成的程序直接下载,而不是使用调试模式,鼠标程序是工作的。

初次使用STC,感觉简单的样例运行都需要好多时间摸索,哎!

国芯人工智能 发表于 2025-4-16 05:53:00

问题分析与解决方案

问题描述
在使用开天斧板子进行《-22-基于HID协议的USB鼠标范例》调试时,程序运行停留在以下代码处:
c
while (!(IRC48MCR & 0x01));
具体表现为:
1. 调试模式下,程序无法继续执行,停留在上述代码处。
2. 直接下载生成的程序到板子中,USB鼠标功能正常工作。

初步分析
1. IRC48MCR寄存器:该寄存器通常用于控制内部48MHz时钟的稳定状态。IRC48MCR & 0x01用于检查48MHz时钟是否已经稳定。
2. 调试模式与直接下载的区别:
调试模式:在调试模式下,程序执行可能会受到调试器的影响,例如断点、单步执行等,可能导致某些硬件状态无法及时更新。
直接下载:程序直接运行,不受调试器干扰,硬件状态能够正常更新。

可能原因
1. 时钟稳定时间不足:在调试模式下,由于调试器的介入,可能导致时钟稳定时间不足,程序无法及时检测到时钟稳定信号。
2. 调试器配置问题:调试器的配置可能影响了硬件状态的读取,导致程序无法正确判断时钟是否稳定。
3. 硬件初始化顺序问题:在调试模式下,硬件初始化顺序可能与直接下载时不同,导致某些硬件状态未能及时更新。

解决方案
1. 增加时钟稳定等待时间:
   在while (!(IRC48MCR & 0x01));之前增加一段延时,确保时钟有足够的时间稳定。例如:
   c
   delayms(10);// 增加10ms延时
   while (!(IRC48MCR & 0x01));
2. 检查调试器配置:
   确保调试器的配置不会影响硬件状态的读取。可以尝试调整调试器的设置,例如关闭某些可能影响硬件状态的调试功能。
3. 优化硬件初始化顺序:
   检查并优化硬件初始化顺序,确保在调试模式下,硬件状态能够及时更新。例如,确保在检查时钟稳定之前,所有相关的硬件初始化已经完成。

具体操作步骤
1. 修改代码:
   在while (!(IRC48MCR & 0x01));之前增加一段延时,例如:
   c
   delayms(10);// 增加10ms延时
   while (!(IRC48MCR & 0x01));
2. 重新编译并下载:
   重新编译代码,并使用调试模式进行测试,观察程序是否能够继续执行。
3. 调整调试器配置:
   如果问题仍然存在,尝试调整调试器的配置,例如关闭某些可能影响硬件状态的调试功能。
4. 优化硬件初始化顺序:
   检查并优化硬件初始化顺序,确保在调试模式下,硬件状态能够及时更新。

总结
通过增加时钟稳定等待时间、检查调试器配置以及优化硬件初始化顺序,可以有效解决调试模式下程序停留在while (!(IRC48MCR & 0x01));处的问题。初次使用STC系列芯片时,可能会遇到一些调试问题,但通过逐步分析和优化,可以顺利解决这些问题,提高开发效率。

希望以上分析和解决方案能够帮助您顺利解决问题,祝您在STC系列芯片的开发过程中取得更多成果!

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

DebugLab 发表于 2025-4-16 08:26:20

制作完成仿真芯片后,必须对目标单片机重新上电仿真功能才有效
如果使用官方的Link1D或者USB转双串口工具制作仿真芯片,由于工具上有自动停电/上电电路,工具会在制作完成后自动进行停电/上电,此时才不需要重新上电
如果是使用其他工具制作仿真芯片后,制作完成后必须对目标单片机重新上电,仿真功能才有效,才可正常进行仿真
STC32G12K128/STC32G12K647.4.8以及此前的固件版本,制作成串口和USB仿真后,用USB下载能恢复到正常下载
STC32G12K128/STC32G12K647.4.12/7.4.13固件版本,制作成串口和USB仿真后,使用USB下载不能恢复到正常下载,需要更新到7.4.14版本
不建议仿真USB,仿真还是有一些限制的,还有上位机操作系统有超时机制,仿真加入断点停止响应,上位机操作系统就会认为USB设备异常或断开

Simiguy 发表于 2025-4-17 07:20:20

是程序设置问题。 忘了设置调试器。 但是仍然无法正常调试程序。 使用P3.6,P3.7作为SW接口;使用LINK1作为调试器; USB连接到主机; 程序可以进入调试界面,但是无法单步跟踪。
使用相同设置,运行跑马灯程序,可以单步跟踪调试。
USB鼠标样例程序, 如果在初始化处设置断点,会导致程序不断的重置,开始,停留在断点处。 如果不设置任何断点, 可以运行,但是PC端看不到鼠标连接。

Simiguy 发表于 2025-4-17 07:23:56

你们的工程师能否给一个可以调试的程序样例?
页: [1]
查看完整版本: 开天斧《-22-基于HID协议的USB鼠标范例》调试停留在while (!(IRC48MCR & 0x01));处