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

跟冲哥学习STC单片机心得之不停电下载USB-HID

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-04-30 07:32:43

9

主题

85

回帖

1654

积分

金牌会员

积分
1654
发表于 2024-2-20 22:09:25 | 显示全部楼层 |阅读模式
在学习冲哥视频第4集之前的教程,我们的程序写入单片机都是通过先按下P3.2不放,再按下电源按钮,接着松开电源按钮,再放开P3.2。让STCISP软件识别到“STC-USB-Writer”后再点“下载/编程”写入程序到单片机。

在第4集,冲哥讲到更便捷的不停电下载程序方法,并且高手必须会。
但是在跟着冲哥的视频一路敲代码下来,发现程序总是会报一堆乱七八糟的警告,编译无法通过,但是把冲哥教程的程序下载下来又可以编绎通过。在查找芯片手册半天也没有找到解决办法。
几次三番都想放弃了,后面想到冲哥的视频里多次出现学习单片机一定要耐烦,不能碰到一点小小问题就放弃。
后来在论坛搜索到神农鼎大哥推荐的B站的一个USB-HID不停电下载的视频,才在里面终于找到答案。
可以说这里面还是有几个坑的,我替大家踩过了,希望大家在学习这个不停电下载时能够跳过这几个坑。
当然也有可能是我逛论坛太少了,本着学习的态度,也记录下自己在学习单片机过程中的一些心得与体会吧。


        USB-HID不停电下载操作步骤:
        1.新建好工程,并将main.c主程序添加到工程内;
        2.在main程序中引用“comm/stc32_stc8_usb.h”,并设置好“include path”;// 冲哥的视频是把要用的库文件和.h文件统一放到comm文件夹内
        3.在“Options for Targer 'Target1'”中,将Memory mode改为“xsmall”,OUTPUT中Create HEX File画勾
        4.添加stc_usb_hid_32.LIB库文件;
        5.在“Options for Targer 'Target1'”的L251Misc中Misc control中添加“REMOVEUNUSED”;
        6.按F7生成target files。
        7.打开STCISP软件,在“收到用户命令后复位到ISP监控程序区”中勾选对应选项



其实主要编译不能通过是因为第3和第5点。请看我录制的操作视频


1.添加main.c主程序到工程内

1.添加main.c主程序到工程内

2.引用comm文件夹内的stc32_stc8_usb.h文件,并设置好引用路径

2.引用comm文件夹内的stc32_stc8_usb.h文件,并设置好引用路径

3-1.Memory mode修改为xsmall

3-1.Memory mode修改为xsmall

3-2.OUTPUT中Create HEX File画勾

3-2.OUTPUT中Create HEX File画勾

4.添加stc_usb_Hid_32.LIB库文件

4.添加stc_usb_Hid_32.LIB库文件

5.L251Misc中的Misc control添加REMOVEUNUSED

5.L251Misc中的Misc control添加REMOVEUNUSED

6.生成HEX文件后在STCISP软件设置

6.生成HEX文件后在STCISP软件设置

不停电下载USB-HID.rar

60.74 KB, 下载次数: 121

工程文件与主函数

永远相信美好的事情即将发生!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-04-30 07:32:43

9

主题

85

回帖

1654

积分

金牌会员

积分
1654
发表于 2024-2-21 13:53:14 | 显示全部楼层
更新:不停电下载之使用USB-CDC,

与USB-HID对比,main.c主程序中的void sys_init()需要增加2行语句,
USBCLK = 0x00;
USBCON = 0x90;
在Options for Target 'Target1'中的选项设定与USB-HID一致,主要是修改memory mode为‘xsmall’,在L251 Misc中增加‘REMOVEUNUSED'。
添加stc_usb_cdc.LIB库到工程中,
Windows7的电脑操作系统需要在STCISP软件中安装USB-CDC串口驱动程序,Win10则不需要。
首次下载程序需要按P3.2+电源键进行USB-HID下载模式。程序下载入单片机后,会弹出USB-CDC(COM端口号)。
在“收到用户命令后复位到ISP监控程序区”中勾选USB-CDC/串口模式,
勾选“使用默认的内部自定义命令“@STCISP#””
“下次使用STC-HID接口进行ISP下载”
“每次下载前都先发送自定义命令”
即可在下次写入单片机程序时无需手动断电,可直接按“下载/编程”刷写程序。
1.Win7系统安装USB-CDC串口驱动程序1.jpg
2.在弹出的对话框选择‘是’.jpg
3.找到驱动程序文件后选择1个最新的文件,再选择‘复制’.jpg
4.选择复制文件后弹出驱动程序安装向导,点击下一步.jpg
5.驱动程序安装成功.jpg
6.首次用手动进入USB-HID方式将HEX文件写入单片机.jpg
7.程序写入成功并弹出STC-USB CDC (COM端口号).jpg

7.USB-CDC虚拟串口.zip

87.99 KB, 下载次数: 107

永远相信美好的事情即将发生!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2024-12-14 14:52:56

0

主题

23

回帖

300

积分

中级会员

积分
300
发表于 2024-2-29 19:36:47 | 显示全部楼层
我每次下载程序时,串口会从CDC模拟出来的变成USB writer1
然后再重新下载就可以了,我不知道这种操作是否是对的
回复 支持 反对

使用道具 举报 送花

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

717

主题

1万

回帖

1万

积分

管理员

积分
15617
发表于 2024-2-29 21:23:51 | 显示全部楼层
1,下载走的是 USB-HID
2,下载成功立即复位到用户程序区,

      跑的是你烧录入用户程序区的 USB-CDC程序
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:23
  • 最近打卡:2025-02-24 10:27:55

0

主题

12

回帖

132

积分

注册会员

积分
132
发表于 2024-3-2 23:18:45 | 显示全部楼层
感谢啊!果然可以了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:338
  • 最近打卡:2025-04-25 16:31:21
已绑定手机

14

主题

600

回帖

2199

积分

荣誉版主

积分
2199
发表于 2024-3-3 00:34:20 | 显示全部楼层
感觉STC越来越好玩了.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-04-30 07:32:43

9

主题

85

回帖

1654

积分

金牌会员

积分
1654
发表于 2024-3-7 18:36:49 | 显示全部楼层
hap*** 发表于 2024-3-2 23:18
感谢啊!果然可以了




目前测试也可以通过USB-HID收发数据。可以看下我这个视频。
  1. /**************************************************************************
  2.         “通过USB HID协议打印数据信息”操作步骤:
  3.         1.新建好工程,并将main.c主程序添加到工程内,主程序需增加
  4.                 if(bUsbOutReady)
  5.                 {
  6.                         USB_SendData(UsbOutBuffer,64);  //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  7.                         usb_OUT_done();                                        //接收应答(固定格式)                       
  8.                 }
  9.         2.在main程序中引用“comm/stc32_stc8_usb.h”,并设置好“include path”,打开stc32_stc8_usb.h,将
  10.         #define PRINTF_HID  //printf输出直接重定向到USB HID接口printf函数重定向到USB输出数据,取消这行的注释,使其启用;
  11.         3.在“Options for Targer 'Target1'”中,将Memory mode改为“xsmall”,OUTPUT中Create HEX File画勾
  12.         4.添加stc_usb_hid_32.LIB库文件;
  13.         5.在“Options for Targer 'Target1'”的L251Misc中Misc control中添加“REMOVEUNUSED”;
  14.         6.按F7生成target files。
  15.         7.打开STCISP软件,在“收到用户命令后复位到ISP监控程序区”中勾选对应选项
  16. **************************************************************************/
  17. #include <STC32G.H>
  18. #include "comm/stc32_stc8_usb.h"
  19. #define MAIN_Fosc       24000000L   //定义主时钟
  20. char *USER_DEVICEDESC = NULL;
  21. char *USER_PRODUCTDESC = NULL;
  22. char *USER_STCISPCMD = "@STCISP#";
  23. void delay_ms(u16 ms)
  24. {
  25.         u16 i;
  26.         do
  27.         {
  28.                 i= MAIN_Fosc/6000;
  29.                 while(--i);
  30.         }        while(--ms);
  31. }
  32. void sys_init()
  33. {
  34.     WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  35.     EAXFR = 1; //扩展寄存器(XFR)访问使能
  36.     CKCON = 0; //提高访问XRAM速度
  37.     P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
  38.     P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
  39.     P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
  40.     P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
  41.     P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
  42.     P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
  43.     P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
  44.     P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口
  45.     //====== USB 初始化 ======
  46.     P3M0 &= ~0x03;
  47.     P3M1 |= 0x03;
  48.    
  49.     IRC48MCR = 0x80;
  50.     while (!(IRC48MCR & 0x01));
  51. }
  52. void main()
  53. {
  54.     sys_init();  //系统初始化
  55.     usb_init();  //USB CDC 接口配置
  56.     EA = 1;                 //打开总中断
  57.    
  58.     while (1)
  59.     {
  60.                 if(bUsbOutReady)
  61.                 {
  62.                         USB_SendData(UsbOutBuffer,64);  //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
  63.                         usb_OUT_done();        //接收应答(固定格式)                       
  64.                 }
  65.                 if (!P33)
  66.         {
  67.                         delay_ms(10);
  68.                         if (!P33)
  69.                         {
  70.                                 while (!P33);
  71.                                 printf("HELLO World!\r\n");  //使用printf函数重定向到USB输出数据
  72.                         }
  73.         }
  74.                 if (!P34)
  75.         {
  76.             delay_ms(10);
  77.                         if (!P34)
  78.                         {
  79.                                 while (!P34);
  80.                                 printf("温度%2.1f\r\n",15.6);  //使用printf函数重定向到USB输出数据
  81.                         }
  82.         }
  83.                 if (!P35)
  84.         {
  85.             delay_ms(10);
  86.                         if (!P35)
  87.                         {
  88.                                 while (!P35);
  89.                                 printf("湿度%2.1f\r\n",55.3);  //使用printf函数重定向到USB输出数据
  90.                         }
  91.         }
  92.     }
  93. }
复制代码


点评

厉害了大哥,举一反三!指导我爬出了这个坑  发表于 2024-3-8 10:32
永远相信美好的事情即将发生!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:115
  • 最近打卡:2025-04-22 20:38:33

0

主题

71

回帖

147

积分

注册会员

积分
147
发表于 2024-3-11 15:56:20 | 显示全部楼层
这个功能6啊{:5_332:}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:391
  • 最近打卡:2025-04-30 00:26:42

0

主题

336

回帖

1490

积分

金牌会员

积分
1490
发表于 2024-3-12 09:30:07 | 显示全部楼层
不错,学习了
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 11:17 , Processed in 0.718847 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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