lgwd 发表于 2023-5-30 15:24:10

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

已经按贵公司的示例将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串口。但我们的程序中暂时并没有使用。

32G12K128 发表于 2023-5-30 17:34:12

复位之后USB寄存器重新 复位过吗?



乘风飞扬 发表于 2023-5-30 18:00:23

本帖最后由 乘风飞扬 于 2023-5-30 18:03 编辑

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

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

lgwd 发表于 2023-5-31 00:07:01

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

lgwd 发表于 2023-5-31 00:13:38

"在复位前都会进行清除USB设置操作。"给出的例子里有吗?这个之前我还真不知道复位前还要先清除USB设置操作!照理复位后从头开始,还是执行之前的标准USB设置程序啊?

lgwd 发表于 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 发表于 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,就必须按上述执行

乘风飞扬 发表于 2023-5-31 18:55:16

lgwd 发表于 2023-5-31 00:13
"在复位前都会进行清除USB设置操作。"给出的例子里有吗?这个之前我还真不知道复位前还要先清除USB设置操作 ...

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



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

lgwd 发表于 2023-6-2 12:35:26

按上述操作问题解决了,再执行“IAP_CONTR = 0x20;”就不会死机了。谢谢回复!

dongchengya 发表于 2024-3-13 12:05:04

lgwd 发表于 2023-5-31 00:07
软件复位后难道不是从头开始执行执行程序并且初始化吗?之前的应用程序在每次测量结束,上位机发来结束命令 ...这里说到的 上位机USB必须连接,否则程序会卡住的问题,
这个是因为USB_CDC函数库有问题
页: [1]
查看完整版本: 加入CDC串口后执行“IAP_CONTR = 0x20 ”语句就死机了 |已解决