关于ch372的复位问题

stm+ch372, 系统初始化的时候

CH375_WR_CMD_PORT( CMD_CHECK_EXIST );

CH375_WR_DAT_PORT( i );

j = CH375_RD_DAT_PORT();

if (j != 0x55) {

 for (i = 80; i != 0; i--) {

   CH375_WR_CMD_PORT( CMD_RESET_ALL );

CH375_RD_DAT_PORT();

 }

 CH375_WR_CMD_PORT(0);

是成功的,

如果在运行的时候 单片机 因为其它原因导致 看门狗复位了,再次执行到这个CMD_RESET_ALL命令以后,这时候上位机程序似乎收不到 CH375SetNotity的回调函数,因为下位机已经复位重新执行,上位机用原来的句柄则无法与复位后的单片机通过usb通讯 导致 失败。


请问有什么办法可以解决这种 单片机复位了,上位机能知道372的设备变化了。这样上位机就可以重新搜索和打开usb设备,而不是 无法控制下位机,必须通过关闭上位机程序重新再打开才可以操作。

另外一个问题,CH375WriteData()调用之前 会设置超时函数 CH375SetTimeout( pDeviceList[i].handle, 1500, 1500 );  现在的问题是调用CH375WriteData()始终返回值为真,这样 就没有办法知道 它是真的操作正确 返回真 ,还是因为超时返回的正确 真。


超时返回时,第3个参数长度会被修改成0,不是超时时,第3个参数长度会被修改成实际传输长度


第1个问题呢?


如果你知道什么时候复位,那么你在复位之前发送CH372复位命令,或者改变CH372模式变成未启用状态,这样上位应该就检测不到设备连接了,如果你不知道单片机什么时候复位,CH372如果在此过程中并未断电,寄存器状态保持也是正常的,所以你只有自己设置标志位进行判断了,比如判断单片机某个寄存器的值,只有在复位以后才会改变,上电之后先判断该位,如果有复位状态,那么复位CH372,这样上位机应该也会重新连接设备。


只有登录才能回复,可以选择微信账号登录