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

等待HIDISP时, 还需要什么操作

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-10-13 19:49:57

8

主题

23

回帖

184

积分

注册会员

积分
184
发表于 2025-10-8 16:37:13 | 显示全部楼层 |阅读模式
单片机: STC32F12K54
首先我可以确定板子是可以进行不掉电下载的, 我用官方提供的集成的usbcdc库, 实现了不掉电下载
其次 我当前程序没有使用集成的USB库, 但是CDC功能已经调通了, 可以跟电脑实现互联
我确定当单片机收到"STCISP"后, 单片机会重启, 但是不知道为啥等不到HIDISP
代码如下
ScreenShot_2025-10-08_162625_575.png
ScreenShot_2025-10-08_162653_492.png

请大神帮忙分析下原因


我发现原因了, 我的程序把延时的那个10ms放在了 0x60那句话之后了
我反复的进行了测试, 10ms和0x60如果调换前后顺序, 就是我说的这个现象,好像跟上面那些寄存器无关
感谢版主:ercircle


回复

使用道具 举报 送花

3

主题

1880

回帖

608

积分

等待验证会员

积分
608
发表于 2025-10-8 16:38:00 | 显示全部楼层
您好,感谢您提供的详细信息和代码附件。针对您在使用 STC32F12K54 单片机过程中,无法接收到 HIDISP 命令的问题,我将从以下几个方面为您进行专业分析和建议:

一、问题概述

您已经实现了以下功能:
使用 USB CDC 类实现了与电脑的通信;
能够在收到 "STCISP" 命令后触发单片机重启;
确认单片机具备 不掉电下载(USB CDC 下载) 的能力;
但 未能接收到 "HIDISP" 命令,即无法进入 HID Bootloader 模式。

目标是:在特定命令(如 "HIDISP")触发后,进入 HID Bootloader 模式,以便通过 STC-ISP 等工具进行程序更新。

二、HIDISP 与 STC Bootloader 的工作机制

1. STC32F 系列的 Bootloader 启动机制

STC32F 系列芯片支持多种 Bootloader 模式,包括:
USB CDC 下载(不掉电)
HID 下载(推荐方式,速度更快)

通常,芯片上电后会先进入 Bootloader,等待一定时间或收到特定命令后跳转到用户程序。反之,用户程序也可以通过特定方式(如收到 "STCISP" 或 "HIDISP" 命令)触发重启并进入 Bootloader。

2. HIDISP 的作用
"HIDISP" 是 STC Bootloader 的一个命令,用于指示单片机重启并进入 HID 模式。
进入 HIDISP 模式后,单片机会枚举为 HID 设备,STC-ISP 可以通过 HID 接口进行程序更新。

3. 触发条件
收到 "HIDISP" 命令后,需在程序中设置标志位或跳转地址,强制进入 Bootloader 的 HID 模式。
需要确保 Bootloader 能识别该跳转方式,并切换到 HID 模式。

三、问题分析与可能原因

结合您的描述和代码(附件未显示,但基于描述推断),可能的原因包括:

1. 未正确设置进入 HID Bootloader 的触发机制

在收到 "HIDISP" 后,您可能只是触发了重启,但未明确指示进入 HID 模式。
STC Bootloader 通常通过 特定地址写入标志(如 RAM 或寄存器)来判断应进入哪种模式。
如果只是执行 MCUReset(),Bootloader 会默认进入 CDC 模式或其他默认模式。

2. Bootloader 版本或配置不支持 HIDISP
确保芯片内部 Bootloader 版本支持 HIDISP 功能。
若 Bootloader 仅支持 CDC 下载,则即使收到 "HIDISP" 也不会切换模式。

3. 用户程序未正确配置 USB 模块为 HID 模式
如果您当前程序未使用官方集成的 USB 库,而是自行实现 USB CDC,可能未包含 HID 模式的切换逻辑。
需要在收到 "HIDISP" 后,切换 USB 模式为 HID,或直接跳转到 Bootloader 的 HID 模式。

4. 硬件或枚举问题
确保 USB 接口连接正常,D+/D- 信号稳定;
若设备无法正确枚举为 HID 设备,PC 端也无法识别。

四、解决方案与建议

1. 设置进入 HID Bootloader 的标志

在收到 "HIDISP" 后,建议通过以下方式之一触发进入 HID 模式:

方法一:写入特定地址作为标志
  1. c
  2. // 假设 Bootloader 会读取 RAM 地址 0x20000000 作为跳转标志
  3. (uint32t)0x20000000 = 0x48494449; // 'HIDI' 表示进入 HID 模式
  4. SysReset(); // 触发系统复位
复制代码

方法二:调用 Bootloader 入口函数(如支持)
  1. c
  2. typedef void (BootloaderEntry)(void);
  3. BootloaderEntry JumpToBootloader = (BootloaderEntry)0x1FFF0000; // 示例地址,需查阅手册
  4. JumpToBootloader();
复制代码
⚠️ 注意:实际地址需查阅 STC 提供的 Bootloader 入口说明。

2. 确认 Bootloader 支持 HIDISP
查阅 STC 提供的 Bootloader 版本说明文档;
若不确定,可尝试使用官方 USB CDC 库重新烧录 Bootloader;
或联系 STC 官方技术支持确认 Bootloader 是否支持 HIDISP 模式。

3. 检查 USB 枚举配置
确保在进入 HID 模式时,USB 描述符正确配置为 HID 类;
若自行实现 USB 栈,确保支持 HID 描述符、端点配置等;
使用 USB 抓包工具(如 Wireshark、USBlyzer)检查枚举过程是否正常。

4. 调试建议
在收到 "HIDISP" 后,添加调试输出,确认命令是否被正确接收;
添加 LED 指示灯或串口输出,确认是否执行了跳转或复位;
使用 STC-ISP 的日志功能查看是否检测到设备。

五、总结

| 问题点 | 原因分析 | 解决建议 |
|--------|----------|-----------|
| 未收到 HIDISP 响应 | Bootloader 未识别跳转标志 | 设置特定地址标志或调用 Bootloader 入口 |
| 无法进入 HID 模式 | Bootloader 不支持 HIDISP | 确认 Bootloader 版本,或重新烧录 |
| USB 枚举失败 | 描述符配置错误 | 检查 USB 配置,使用抓包工具排查 |
| 用户程序干扰 | 自定义 USB 栈未切换模式 | 切换至 HID 模式或跳转 Bootloader |

六、参考资料与建议

1. STC32F 系列用户手册(STC 官网)
2. STC-ISP 工具使用手册
3. USB HID 类规范文档
4. STC 官方论坛与技术支持邮箱

如果您方便的话,可以提供以下信息,以便更精准地定位问题:
Bootloader 的版本号或烧录方式;
USB CDC/HID 的端点配置与描述符;
收到 "HIDISP" 后的跳转逻辑代码片段;
使用的 STC-ISP 版本及操作日志。

如仍有疑问,欢迎继续交流!祝您项目顺利,快速解决问题!

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-10-15 08:50:20
已绑定手机

85

主题

3256

回帖

7196

积分

荣誉版主

无情的代码机器

积分
7196
发表于 2025-10-8 16:49:32 | 显示全部楼层

还是CDC模式,未进入USB Writer
截图202510081649136087.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:106
  • 最近打卡:2025-10-13 11:16:33

34

主题

1308

回帖

3128

积分

超级版主

积分
3128
发表于 6 天前 | 显示全部楼层
注意图里这两个选项,
如果使用【USB转串口的下载器】下载,
不要勾选下面那个【下次使用HID接口进行ISP下载
截图202510100902308606.jpg
不要勾选【下次使用HID接口进行ISP下载

==========================================================

下图连接才是 硬件USB下载线路,【使用HID接口进行ISP下载




点评

我已经把P3.2接地了  发表于 6 天前
STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-10-13 19:49:57

8

主题

23

回帖

184

积分

注册会员

积分
184
发表于 6 天前 | 显示全部楼层
erci*** 发表于 2025-10-8 16:49
还是CDC模式,未进入USB Writer

你好, 我也发现这个问题了, 但是我还是有点不明白
我发送了重启命令, 设备应该是重启了, 因为我测试了, 用下列示例程序, 当点击下载后, 开发板指示灯确实发生了变化, 说明程序确实可以走到我设计的程序段中

ScreenShot_2025-10-10_133806_382.png

当我把隐掉的关于重启的语句重新放开后, 此时点击下载, STC下载软件的串口显示还是仍旧显示USBCDC,
此时设备已经重启, 为什么不自动跳转到USB WRITER呢?
我感觉是不是还有其他应该设置的地方?


另外我要说明的是 P3.2我用短路环一直接地


还有要说明的一点, 在我自己的开发板中,
我设置了两个指示灯, 一个P20, 另一个P21,
P21我用在主循环中, 用来判断主循环是否运行,
P20我直接放在了定时器中断中,
使用重启命令后, P21不再闪烁, 但是定时中断中的P20还是依旧闪烁
重启后, 定时器和其中断服务函数还是按照上一次的设置运行?

点评

是的延时位置也重要,上面那些寄存器都是历史经验,配置PLL之类外设时会用到,建议按图里配置  详情 回复 发表于 6 天前
改成这样: [attachimg]117085[/attachimg] 还不行的话打包上传工程我测测。  详情 回复 发表于 6 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-10-15 08:50:20
已绑定手机

85

主题

3256

回帖

7196

积分

荣誉版主

无情的代码机器

积分
7196
发表于 6 天前 | 显示全部楼层
zsb7*** 发表于 2025-10-10 13:52
你好, 我也发现这个问题了, 但是我还是有点不明白
我发送了重启命令, 设备应该是重启了, 因为我测试了,  ...

改成这样:

截图202510101438346996.jpg

还不行的话打包上传工程我测测。

点评

我发现原因了, 我的程序把延时的那个10ms放在了 0x60那句话之后了 我反复的进行了测试, 蓝色字体的两句如果调换前后顺序, 就是我说的这个现象, 跟上面那些寄存器无关   发表于 6 天前
这样子可以了 感谢!@@!!!  发表于 6 天前
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-10-15 08:50:20
已绑定手机

85

主题

3256

回帖

7196

积分

荣誉版主

无情的代码机器

积分
7196
发表于 6 天前 | 显示全部楼层
zsb7*** 发表于 2025-10-10 13:52
你好, 我也发现这个问题了, 但是我还是有点不明白
我发送了重启命令, 设备应该是重启了, 因为我测试了,  ...

是的延时位置也重要,上面那些寄存器都是历史经验,配置PLL之类外设时会用到,建议按图里配置
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 05:39 , Processed in 0.136452 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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