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

加入CDC串口后执行“IAP_CONTR = 0x20 ”语句就死机了 |已解决

[复制链接]
  • TA的每日心情
    开心
    前天 16:12
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    35

    主题

    86

    回帖

    729

    积分

    高级会员

    积分
    729
    发表于 2023-5-30 15:24:10 | 显示全部楼层 |阅读模式
    已经按贵公司的示例将CDC串口加入自己的程序,调试CDC串口收发都正确。
    其实也就是加入CDC中断库和stc32_stc8_usb.h头文件。再将中断BOOL usb_OUT_callback()文件加入,改写处理接收数据内容。添加了CDC串口发送数据。
    我们的程序上电运行正常。但是程序中只要执行“IAP_CONTR = 0x20 ”语句,就无反应,死掉了。只能断电再重新上电。
    之前的程序没有加入CDC这块,多处位置执行“IAP_CONTR = 0x20 ”语句后程序都运行回到初始界面。加入CDC后就不行了,找不到原因。
    上述死机情况还是出现在完全没有调用CDC部分,只是运行程序原来的部分。CDC只是在初始化部分加入,通过PC也看到了CDC串口出现了。用串口助手可以正确打开和使用CDC串口。但我们的程序中暂时并没有使用。
    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-5 13:56
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    12

    主题

    245

    回帖

    1540

    积分

    超级版主

    积分
    1540
    发表于 2023-5-30 17:34:12 | 显示全部楼层
    复位之后USB寄存器重新 复位过吗?

    1.png

    电话:0513-55012946 QQ:2195591714  微信:  19952583740
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4033

    积分

    论坛元老

    积分
    4033
    发表于 2023-5-30 18:00:23 | 显示全部楼层
    本帖最后由 乘风飞扬 于 2023-5-30 18:03 编辑

    正如2楼所说的,复位前,或者复位后清除一下USB寄存器就能解决你所说的问题:
    1.     USBCON = 0x00;      //清除USB设置
    2.     USBCLK = 0x00;
    3.     IRC48MCR = 0x00;
    4.    
    5.     delay_ms(10);
    6.     IAP_CONTR = 0x20;   //软件复位
    复制代码
    附件例程也可以测试,CDC串口收到任意数据就会产生一次复位。

    开天斧、屠龙刀例程包里面的例子,在复位前都会进行清除USB设置操作。

    stc8h_cdc_data_interrupt_demo.zip

    25.66 KB, 下载次数: 24

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 16:12
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    35

    主题

    86

    回帖

    729

    积分

    高级会员

    积分
    729
     楼主| 发表于 2023-5-31 00:07:01 | 显示全部楼层
    软件复位后难道不是从头开始执行执行程序并且初始化吗?之前的应用程序在每次测量结束,上位机发来结束命令。下位机就执行“IAP_CONTR = 0x20 ”语句,下位机自动重新初始化,没有任何程序干预,也干预不了啊?下位机main主程序开始执行贵公司的USB标准初始化程序(同上),然后执行应用程序的系统初始化,再就转入循环不断监测上位机发来的命令和键盘有无指令输入。处理命令执行。执行“IAP_CONTR = 0x20 ”后还能怎么进行控制?此外,之前还发现一个问题。如果USB线没有插入电脑,贵公司的标准USB初始化程序好像就进行不下去,整个下位机机程序无法继续。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 16:12
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    35

    主题

    86

    回帖

    729

    积分

    高级会员

    积分
    729
     楼主| 发表于 2023-5-31 00:13:38 | 显示全部楼层
    "在复位前都会进行清除USB设置操作。"给出的例子里有吗?这个之前我还真不知道复位前还要先清除USB设置操作!照理复位后从头开始,还是执行之前的标准USB设置程序啊?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 16:12
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    35

    主题

    86

    回帖

    729

    积分

    高级会员

    积分
    729
     楼主| 发表于 2023-5-31 00:28:54 | 显示全部楼层
    5月25日下载的示例文件中可没见下述语句:
        USBCON = 0x00;      //清除USB设置
        USBCLK = 0x00;
        IRC48MCR = 0x00;
       
        delay_ms(10);
        IAP_CONTR = 0x20;   //软件复位
           
    请问,如果使用CDC串口的应用程序不执行“IAP_CONTR = 0x20;”操作,只是正常收发数据,上述前4行不需要执行吧?
    如果马上要执行“IAP_CONTR = 0x20;”操作了,就必须按上述5行执行?

    点评

    zhp
    USBCON = 0x00; //清除USB设置 USBCLK = 0x00; IRC48MCR = 0x00; 这3句代码是用来关闭USB模块,以及USB的时钟源的 如果您的代码只是正常收发数据,不用也不能执行上面的语句 但如果需要要执行“IA  详情 回复 发表于 2023-5-31 09:59
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    16

    主题

    711

    回帖

    2528

    积分

    超级版主

    积分
    2528
    发表于 2023-5-31 09:59:44 | 显示全部楼层
    lgwd 发表于 2023-5-31 00:28
    5月25日下载的示例文件中可没见下述语句:
        USBCON = 0x00;      //清除USB设置
        USBCLK = 0x00;

        USBCON = 0x00;      //清除USB设置
        USBCLK = 0x00;
        IRC48MCR = 0x00;
    这3句代码是用来关闭USB模块,以及USB的时钟源的

    如果您的代码只是正常收发数据,不用也不能执行上面的语句
    但如果需要要执行“IAP_CONTR = 0x20;”操作来复位CPU,就必须按上述执行

    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    26

    主题

    1297

    回帖

    4033

    积分

    论坛元老

    积分
    4033
    发表于 2023-5-31 18:55:16 | 显示全部楼层
    lgwd 发表于 2023-5-31 00:13
    "在复位前都会进行清除USB设置操作。"给出的例子里有吗?这个之前我还真不知道复位前还要先清除USB设置操作 ...

    开天斧、屠龙刀例程包里,有不停电下载功能的例子里面基本都有,以下是通过长按P32口按键进行复位的代码:

    1.png

    通过USB发指令进行复位的代码一般是封装的库文件里面,看不到源程序。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    前天 16:12
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    35

    主题

    86

    回帖

    729

    积分

    高级会员

    积分
    729
     楼主| 发表于 2023-6-2 12:35:26 | 显示全部楼层
    按上述操作问题解决了,再执行“IAP_CONTR = 0x20;”就不会死机了。谢谢回复!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-3-20 22:27
  • 签到天数: 6 天

    [LV.2]偶尔看看I

    2

    主题

    31

    回帖

    102

    积分

    注册会员

    积分
    102
    发表于 2024-3-13 12:05:04 | 显示全部楼层
    lgwd 发表于 2023-5-31 00:07
    软件复位后难道不是从头开始执行执行程序并且初始化吗?之前的应用程序在每次测量结束,上位机发来结束命令 ...
    这里说到的 上位机USB必须连接,否则程序会卡住的问题,
    这个是因为USB_CDC函数库有问题
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-3 18:00 , Processed in 0.074319 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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