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

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

[复制链接]
  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 128 天

    [LV.7]常住居民III

    5

    主题

    49

    回帖

    671

    积分

    高级会员

    积分
    671
    发表于 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, 下载次数: 25

    工程文件与主函数

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

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 128 天

    [LV.7]常住居民III

    5

    主题

    49

    回帖

    671

    积分

    高级会员

    积分
    671
     楼主| 发表于 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, 下载次数: 19

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

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-5-8 21:05
  • 签到天数: 47 天

    [LV.5]常住居民I

    0

    主题

    24

    回帖

    278

    积分

    中级会员

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

    使用道具 举报

    该用户从未签到

    552

    主题

    9541

    回帖

    1万

    积分

    管理员

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

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

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-2 08:42
  • 签到天数: 22 天

    [LV.4]偶尔看看III

    0

    主题

    12

    回帖

    124

    积分

    注册会员

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

    使用道具 举报

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 85 天

    [LV.6]常住居民II

    12

    主题

    479

    回帖

    1382

    积分

    荣誉版主

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

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 128 天

    [LV.7]常住居民III

    5

    主题

    49

    回帖

    671

    积分

    高级会员

    积分
    671
     楼主| 发表于 2024-3-7 18:36:49 | 显示全部楼层
    hapyou 发表于 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
    永远相信美好的事情即将发生!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-28 23:04
  • 签到天数: 93 天

    [LV.6]常住居民II

    0

    主题

    76

    回帖

    184

    积分

    注册会员

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

    使用道具 举报

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 75 天

    [LV.6]常住居民II

    0

    主题

    212

    回帖

    486

    积分

    中级会员

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-20 14:19 , Processed in 0.490362 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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