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

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:246
  • 最近打卡:2025-05-03 14:05:48

49

主题

129

回帖

1369

积分

金牌会员

积分
1369
发表于 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串口。但我们的程序中暂时并没有使用。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:20
  • 最近打卡:2025-04-28 16:56:43

21

主题

376

回帖

2345

积分

超级版主

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

1.png

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6845

积分

论坛元老

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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:246
  • 最近打卡:2025-05-03 14:05:48

49

主题

129

回帖

1369

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:246
  • 最近打卡:2025-05-03 14:05:48

49

主题

129

回帖

1369

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:246
  • 最近打卡:2025-05-03 14:05:48

49

主题

129

回帖

1369

积分

金牌会员

积分
1369
发表于 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行执行?

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-5-31 09:59:44 | 显示全部楼层
lg*** 发表于 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,就必须按上述执行

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6845

积分

论坛元老

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

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

1.png

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:246
  • 最近打卡:2025-05-03 14:05:48

49

主题

129

回帖

1369

积分

金牌会员

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-03-20 22:27:30

3

主题

31

回帖

106

积分

注册会员

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 15:19 , Processed in 0.134390 second(s), 118 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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