找回密码
 立即注册
楼主: qiao

STC32的USB下载模式怎么接线啊,我用ttl只能显示是串口,没办法变成STC USB Write(HID

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2025-05-02 13:12:00

24

主题

305

回帖

2560

积分

荣誉版主

积分
2560
发表于 2024-2-17 10:35:08 | 显示全部楼层
本帖最后由 大明狐 于 2024-2-17 11:11 编辑

逐飞科技stc32.jpg



这家系统板的资料页面里有说明啊,USB下载用的是那个Type-C接口。


P325.jpg
但是,这个板子上似乎是缺少一个重要的 把P3.2口拉低的按键,所以估计得自己去接。



STC32G

P322.jpg P324.jpg

STC32F

P321.jpg


P323.jpg



因为如果是新板子,根据芯片手册上的要让STC-ISP识别到SUB-HID,需要先将P3.2口拉低,然后再给单片机上电才能识别到。




识别到USB-HID之后,或者用TTL下载器链接,把USB-HID的驱动代码加进工程程序里,之后就可以用STC-ISP进行自动识别USB-HID了。





所以你的这块系统板的话,要么用它的Type-C接口连接电脑,然后自己在P3.2口上接条线去接GND,然后按那个硬复位键;要么按照芯片手册里的接线图,自己给P3.0、P3.1、P3.2接线。
P326.jpg

QQ截图20240217110725.jpg QQ截图20240217110925.jpg
QQ截图20240217111040.jpg









点评

这个板子的typec后面带了一个ch340的,应该需要单独拿一根usb线链接排针口部分实现usb下载,旁边的引脚处应该是存在p32口的  详情 回复 发表于 2024-2-17 10:57
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5454

积分

版主

积分
5454
发表于 2024-2-17 10:57:24 | 显示全部楼层
大*** 发表于 2024-2-17 10:35
这家系统板的资料页面里有说明啊,USB下载用的是那个Type-C接口。
但是,这个板子上似乎是缺少一个重 ...

这个板子的typec后面带了一个ch340的,应该需要单独拿一根usb线链接排针口部分实现usb下载,旁边的引脚处应该是存在p32口的

点评

这个板子的页面资料上看不到背面,但是说明里没提P3.2口的事儿。方便的话发个背面的图。 另外刚刚把上面的回帖更新了一下,加了下载说明。 STC32和STC8的USB下载都不需要CH340,只用USB线里的D+D-通过33Ω电阻和单  详情 回复 发表于 2024-2-17 11:15
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2025-05-02 13:12:00

24

主题

305

回帖

2560

积分

荣誉版主

积分
2560
发表于 2024-2-17 11:15:56 | 显示全部楼层
王*** 发表于 2024-2-17 10:57
这个板子的typec后面带了一个ch340的,应该需要单独拿一根usb线链接排针口部分实现usb下载,旁边的引脚处 ...

这个板子的页面资料上看不到背面,但是说明里没提P3.2口的事儿。方便的话发个背面的图。

另外刚刚把上面的回帖更新了一下,加了下载说明。
STC32和STC8的USB下载都不需要CH340,只用USB线里的D+D-通过33Ω电阻和单片机的P3.1和P3.0连接就可以直接连接下载。
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2025-05-02 13:12:00

24

主题

305

回帖

2560

积分

荣誉版主

积分
2560
发表于 2024-2-17 11:19:04 | 显示全部楼层

如果板子上有P3.2口的设计,说明里不应该没有说明才对

能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-08-07 02:11:48

4

主题

12

回帖

56

积分

注册会员

积分
56
发表于 2024-2-17 11:43:37 | 显示全部楼层
多谢多谢,这个是板子的图片,我之前用了一下仿真,想要恢复成普通下载模式需要用硬件USB下载一遍程序,但是还是没有操作成功,还是没办法变成STC USB Write(HID)
QQ图片20240217114015.jpg
QQ图片20240217114051.jpg

点评

这个板子正面反面都没有P3.2引脚的设计,所以需要自己接线手动拉低P3.2引脚,再按硬复位那个按键重启单片机,STC-ISP才能识别出 STC USB Write(HID)。 就像这样操作:先拉低P3.2,再上电(可以按硬件复位,也可  详情 回复 发表于 2024-2-17 14:05
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-04-17 01:04:20
已绑定手机

6

主题

57

回帖

208

积分

中级会员

积分
208
发表于 2024-2-17 13:18:57 | 显示全部楼层
本帖最后由 李皇谛 于 2024-2-17 13:48 编辑
大*** 发表于 2024-2-17 11:19
如果板子上有P3.2口的设计,说明里不应该没有说明才对

你那个说明的软件复位按钮放在了P5.4引脚上,这时候你要在ISP编程界面里面把红色所示的钩去掉,那样就能通过串口写ISP复位了。
截图202402171250517331.jpg
如果不行的话,下载用于STC32的USB固件库,通过HID模式或CDC模式二选一(建议直接使用CDC模式),在自己的工程文件中导入“usb.h”以及选中的一种固件库(不能同时导入2个固件库,因为有设备标识符冲突)。
在“usb.h”或者“main.c”里面,把你设置好的单片机频率以Hz为单位定义到“MAIN_Fosc”里面(因为USB固件库要用这个频率调整USB端口)
  1. #define MAIN_Fosc 52000000L //选中的STC32F频率为52MHz
复制代码
在自己的工程文件里记住用于直接进入ISP模式的口令:(我没改过,用默认值了)
  1. char *USER_DEVICEDESC = NULL;                                //设备描述符
  2. char *USER_PRODUCTDESC = NULL;                        //产品描述符
  3. char *USER_STCISPCMD = "@STCISP#";        //设置自动复位到ISP区的用户接口命令
复制代码
紧接着配置好P3.0和P3.1的工作模式,全部工作在高阻输入模式下。并且启用USB用时钟,随后配置好USB的工作模式。
请保证你的工程没有其它硬件使用P3.0和P3.1
  1. void main()
  2. {        //……
  3. //管脚全部重配置为准双向口
  4.         //P0M1=0;        P0M0=0;        P1M1=0;        P1M0=0;        P2M1=0;        P2M0=0;        P3M1=0;        P3M0=0;
  5.         //P4M1=0;        P4M0=0;        P5M1=0;        P5M0=0;        P6M1=0;        P6M0=0;        P7M1=0;        P7M0=0;
  6.         P3M0 &= ~0x03; P3M1 |= 0x03;        //P3.0和P3.1高阻,USB要用到
  7.         IRC48MCR = 0x80; while (!(IRC48MCR & 0x01));    //加USB时钟
  8.         USBCLK = 0x00; USBCON = 0x90; usb_init();
  9. //……
复制代码
以下为USB-CDC简单范例程序,如果你没有头绪,可以直接添加:
  1. while(1){ delay_ms(1);
  2.               if(DeviceState==DEVSTATE_CONFIGURED) LED_P35=0; else continue;//如果USB就绪就点P3.5的灯,否则硬等
  3.               if(bUsbInBusy) {/*等待USB发数据时需要执行的程序,如果没有将整行删除*/};
  4.               if(bUsbOutReady)
  5.               {//……
  6.                //在这里执行从电脑发数据到单片机完毕后的程序
  7.                USB_SendData(UsbOutBuffer,OutNumber); //发内容到电脑,其中“UsbOutBuffer”为收到来自电脑的数据,“OutNumber”为收到数据的字节大小
  8.                usb_OUT_done(); //检查电脑是否收到单片机发的数据
  9.               }
复制代码

烧写程序之后,单片机连接电脑。
如果你用了HID固件,使用HID助手连接制造商编号(VID)为“34BF”的设备(HID\VID_34BF\PID_****),通过中断输入输出当串口使用。
如果你用了CDC固件,直接使用串口助手找到STC单片机的串口。
这时候,不论是使用了串口还是HID调试器,只要输入ISP复位指令(手动输入或者“收到用户命令后复位到ISP监控程序区”),单片机就会直接复位到ISP模式,显示一个HID设备。
*也就是说,不要在你的工程里面使用ISP复位口令用作数据。

截图202402171307045956.jpg

这样的话,就可以直接烧写程序或者检查单片机工作选项了,完成一次ISP操作(写程序或查单片机配置其一)就会复位回用户程序。
如果你用的是串口,建议把“下次使用STC-HID接口进行下载”打钩。
如果不想这么麻烦,可以把“每次下载前都先发送自定义指令”打钩。写程序的时候还要检查自己有没有用错串口或者HID。
截图202402171311063046.jpg
以下为长按P3.2手动进入ISP的程序代码(因为我的核心板里P3.2不连接按钮,同时有其它用途):
  1. void KeyResetScan(void);        //子函数预注册
  2. //……
  3. void main()        //main函数往下,没有注册的子函数不会得到执行,除非你使用了"main.h"预定义
  4. {        //……
  5.         while(1){
  6.                 KeyResetScan();
  7.         }
  8.         //……
  9. }
  10. void KeyResetScan(void)
  11. {        if(!P32)
  12.         {        if(!Key_Flag)
  13.                 {        Key_cnt++;
  14.                         if(Key_cnt >= 1000)                //连续1000ms有效按键检测
  15.                         {         Key_Flag = 1;                                //设置按键状态,防止重复触发
  16.                 USBCON = 0x00;                        //清除USB设置
  17.                 USBCLK = 0x00;                        //USB端口停振
  18.                 IRC48MCR = 0x00;                //停用内部USB时钟
  19.                 delay_ms(10);                                //等配置完成
  20.                 IAP_CONTR = 0x60;        //触发软件复位,从ISP开始执行
  21.                 while (1);        }
  22.         }
  23.     }
  24.     else
  25.     {Key_cnt = 0;Key_Flag = 0;}
  26. }
复制代码

以下为我修改了“usb.h”之后的程序,可自行剪裁复制:
  1. /* READ ME 阅读前注意事项
  2. *基本概念科普:
  3. *STC系列实验板可以直接添加USB接口相关固件库,可在手里没有串口调试器的情况下直接用USB接口进行程序调试与写入。
  4. *单片机具有两种USB驱动模式:USB-HID(人体工程学输入设备)和USB-CDC(数据通信抽象设备)
  5. *HID接口可用于模拟鼠标、键盘、游戏手柄、压枪宏、模拟游戏用特种手柄等等。
  6. *CDC接口可用于电脑跟单片机直接通信并以串口形式交换数据,而且通信速度可以快过普通串口。
  7. *以下操作可能无法使用USB接口:
  8. **用于跟其他单片机的通信
  9. **使用了不正确的模式进行通信(比如CDC模式用了HID接口)
  10. *文件使用事项:
  11. **需要先在工程上导入USB通信用预制库才能用USB功能,一个工程只能使用一个类似预制库文件。
  12. “stc_usb_cdc_32f.LIB”(USB-CDC协议)或“stc_usb_hid_32f.LIB”
  13. *常见解决方法:
  14. *Windows10无法识别单片机,属性提示“驱动程序未经签名”?
  15. **从相同操作系统版本复制usbscan.sys文件到C:\Windows\System32\drivers目录
  16. **使用特殊启动模式:禁用驱动程序强制签名
  17. *无法识别的USB设备?
  18. **若上次烧写好的程序不占用P3.0和P3.1的串口,把串口拔了,直接写默认ISP代码进行USB通信。
  19. **若上次烧写的程序没使用正确的USB驱动(stc_usb_***_32f.LIB)或者无法被识别,只能用串口写程序。
  20. *各种Syntax错误?
  21. **把需要编译但是扩展折叠条件的行添加 #if 1
  22. **把不需要编译的改为#if 0
  23. *我没有P3.2拿来开机复位,怎么写程序?
  24. **直接在串口或者HID的中断区输入“USER_STCISPCMD”内存的接口命令会让单片机自动复位到ISP区域,
  25. **这时候会显示“STC-USB Writer(HID1)”。
  26. *设备重置失败?
  27. **请为“MAIN_Fosc”定义使用的系统时钟。
  28. */
  29. #ifndef __USB_H__
  30. #define __USB_H__
  31. /**需要提前在主程序声明的全局变量:
  32. char *USER_DEVICEDESC = NULL;                                //设备描述符
  33. char *USER_PRODUCTDESC = NULL;                        //产品描述符
  34. char *USER_STCISPCMD = "@STCISP#";        //设置自动复位到ISP区的用户接口命令
  35. #define MAIN_Fosc 52000000L                                        //USB固件库自动调节时间需要的频率(不调节频率,使用52MHz默认值)
  36. //使用串口“printf”打印信息需屏蔽以下两个定义
  37. //#define PRINTF_SEGLED         //printf输出重定向到ISP下载软件中的7段数码管
  38. //#define PRINTF_HID            //printf输出直接重定向到USB HID接口
  39. */
  40. #ifndef NULL
  41. #define NULL ((void *) 0)
  42. #endif
  43. #if 1                //USB状态
  44. #define DEVSTATE_ATTACHED       0        //已插入到接口
  45. #define DEVSTATE_POWERED        1        //已确认通电
  46. #define DEVSTATE_DEFAULT        2        //已进入初始化状态
  47. #define DEVSTATE_ADDRESS        3        //已分配从机地址
  48. #define DEVSTATE_CONFIGURED     4        //已配置工作模式(准备就绪)
  49. #define DEVSTATE_SUSPENDED      5        //遭到挂起
  50. #endif        //USB状态
  51. void usb_init();//初始化USB接口
  52. //void usb_IN();            //USB HID
  53. //void usb_IN(WORD size);   //USB CDC
  54. void usb_OUT_done();        //检查数据是否发送完毕
  55. void USB_SendData(BYTE *dat, int size);                //单片机向连接设备发数据
  56. //ISP虚拟示波器不能使用预置的交互函数。
  57. #if 1                //STC ISP虚拟用户界面交互函数
  58. //        8位7段带点数码管
  59. int SEG7_ShowString(const char *fmt, ...);         //显示字符串
  60. void SEG7_ShowLong(long n, char radix);                        //显示长整数
  61. void SEG7_ShowFloat(float f);                                                                //显示浮点数
  62. void SEG7_ShowCode(BYTE *cod);                                                                //显示原始段码
  63. //        虚拟单片机引脚IO口
  64. void LED40_SendData(BYTE *dat, BYTE size);                //DIP40的单片机LED口
  65. void LED64_SendData(BYTE *dat, BYTE size);                //DIP64的单片机LED口
  66. //        12864型LCD(主控为ST7920)
  67. void LCD12864_DisplayOff();   //快速关闭显示屏
  68. void LCD12864_DisplayOn();  //快速打开显示屏
  69. void LCD12864_CursorOff();   //隐藏光标
  70. void LCD12864_CursorOn();  //显示光标(16×16像素)
  71. void LCD12864_CursorMoveLeft();  //光标左移(16像素)
  72. void LCD12864_CursorMoveRight();   //光标右移(16像素)
  73. void LCD12864_CursorReturnHome();  //光标回位(左上角)
  74. void LCD12864_ScrollLeft();  //向左滚动(16像素)
  75. void LCD12864_ScrollRight();   //向右滚动(16像素)
  76. void LCD12864_ScrollUp(BYTE line);  //向上滚动(line为移动行数)
  77. void LCD12864_AutoWrapOff();  //关闭自动换行
  78. void LCD12864_AutoWrapOn();  //启用自动换行
  79. void LCD12864_ReverseLine(BYTE line);  //将指定行负色(line为第几行)
  80. void LCD12864_DisplayClear();   //清屏
  81. void LCD12864_ShowString(BYTE x, BYTE y, char *str);  //显示字符串
  82. //(主要! x和y为起始位置,str为字符串)
  83. void LCD12864_ShowPicture(BYTE x, BYTE y, BYTE cx, BYTE cy, BYTE *dat);                //显示图片
  84. //(x和y为起始位置,cx为使用行数,cy为使用列数,dat为目标图片)
  85. //        12864型OLED(主控为SSD1306)
  86. void OLED12864_DisplayOff();
  87. void OLED12864_DisplayOn();
  88. void OLED12864_DisplayContent();
  89. void OLED12864_DisplayEntire();
  90. void OLED12864_HorizontalMirror();
  91. void OLED12864_VerticalMirror();
  92. void OLED12864_DisplayReverse();
  93. void OLED12864_SetContrast(BYTE bContrast);
  94. void OLED12864_SetAddressMode(BYTE bMode);
  95. void OLED12864_ScrollLeft(BYTE bPageStart, BYTE bPageEnd, WORD nInterval);
  96. void OLED12864_ScrollRight(BYTE bPageStart, BYTE bPageEnd, WORD nInterval);
  97. void OLED12864_ScrollUp(BYTE bPageStart, BYTE bPageEnd, WORD nInterval);
  98. void OLED12864_ScrollStart();
  99. void OLED12864_ScrollStop();
  100. void OLED12864_ShowPicture(BYTE x, BYTE y, BYTE cx, BYTE cy, BYTE *dat);
  101. #endif        //STC ISP调试器交互函数
  102. int printf_hid (const char *fmt, ...);        //向HID调试界面打印内容
  103. #if defined PRINTF_SEGLED
  104. #define printf  SEG7_ShowString
  105. #elif defined PRINTF_HID
  106. #define printf  printf_hid
  107. #endif
  108. #if 1                //USB基本设备寄存器
  109. extern BYTE xdata UsbFeatureBuffer[64];        //USB设备标识符缓冲器(有默认值)
  110. extern BYTE xdata UsbInBuffer[64];                        //单片机发上位机的数据缓冲器
  111. extern BYTE xdata UsbOutBuffer[64];                        //上位机发单片机的数据缓冲器
  112. extern bit bUsbFeatureReady;                                        //状态:USB设备标识符缓冲器已就绪
  113. extern bit bUsbInBusy;                                                                //状态:正在向上位机发送数据
  114. extern bit bUsbOutReady;                                                        //状态:已收到上位机发单片机的数据
  115. extern BYTE DeviceState;                                                        //状态:USB设备配置状态
  116. extern BYTE OutNumber;                                                        //统计:USB收到数据大小(至多64字节)
  117. #endif
  118. #endif
复制代码
当然,你也可以通过下面一个官方帖子找到CDC用例程:
STC32超级简单的USB-CDC虚拟串口应用及不停电下载(中断模式+查询模式) - USB:USB-CDC虚拟串口/就是串口,一箭双雕之USB转双串口,[鼠标+键盘]的HID复合设备 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区
https://www.stcaimcu.com/forum.p ... id=870&extra=page=1

点评

注意审题,他的这个板子上只做了硬复位(电源)和软复位(P5.4)的按键。但是让STC-ISP识别不带USB-HID代码的芯片,还需要先将P3.2引脚拉低然后再上电,STC-ISP才能识别出“STC USB Write(HID)”设备。而他的这块板  详情 回复 发表于 2024-2-17 13:59
STC存在的意义?
凡夫俗子也能创造 弑神诛仙 的奇迹。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15626
发表于 2024-2-17 13:46:36 | 显示全部楼层
1,STC32G12K128, 他是设置成立 串口仿真,
     所以必须通过 STC32G12K128 自带的硬件USB下载恢复
2,他发了几个其实相同的贴子,我讲的很清楚,他就是故意不看我的指导



截图202402171345484639.jpg


截图202402171346117797.jpg



特别提醒:
STC32G12K128系列芯片制作成串口和USB仿真芯片后, 必须使用USB下载才能恢复正常下载
否则会出现"硬件选项编程失败"的错误

截图202402171349521207.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15626
发表于 2024-2-17 13:47:51 | 显示全部楼层
截图202402171347026217.jpg

自己改造成这个电路

截图202402171347496113.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15626
发表于 2024-2-17 13:51:59 | 显示全部楼层
大家先帮他搞定 如何 硬件USB下载,他好像故意不愿意看我的指导
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2025-05-02 13:12:00

24

主题

305

回帖

2560

积分

荣誉版主

积分
2560
发表于 2024-2-17 13:59:58 | 显示全部楼层
李*** 发表于 2024-2-17 13:18
你那个说明的软件复位按钮放在了P5.4引脚上,这时候你要在ISP编程界面里面把红色所示的钩去掉,那样就能通 ...

注意审题,他的这个板子上只做了硬复位(电源)和软复位(P5.4)的按键。但是让STC-ISP识别不带USB-HID代码的芯片,还需要先将P3.2引脚拉低然后再上电,STC-ISP才能识别出“STC USB Write(HID)”设备。而他的这块板子上没做那个引脚的设计,所以只能建议他自己接线手动拉低P3.2引脚进入“STC USB Write(HID)” 模式你仔细看手册上的图
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 15:45 , Processed in 0.148265 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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