我想问下,是否有数据从单片机向计算机上传的函数是那个?
我用VB定时器触发那个事件: If (CH375ReadData(mIndex, mDemoReq, mLength)) Then ' 通过CH375接收应答数据,成功 If (mLength = CONST_CMD_LEN) Then If ((mDemoReq.mCommandCode <> (&HFF - DEF_CMD_TEST_DATA)) Or (mDemoReq.mParameter(0) <> (&HFF - &H5A)) Or (mDemoReq.mParameter(1) <> (&HFF - &H96))) Then MsgBox "通过USB传输的数据有错误", vbExclamation, mCaptionInform End If Else MsgBox "CH375数据测试返回的长度错误", vbExclamation, mCaptionInform End If Else MsgBox "CH375ReadData 失败", vbExclamation, mCaptionInform End If
如果单片机没发送数据过来,就会出错,有什么方法可以检测到计算机从单片机发送到数据。
摘自说明书CH372DS1.PDF:
上传数据流的发起方式有两种:一种是查询方式,指计算机应用层定期以查询方式发起;另一种 是伪中断方式,指单片机以中断数据通知计算机应用层,再由计算机应用层发起。因为USB总线是主 从式结构,只有在计算机主动联系USB 设备时,USB 设备才能向计算机上传数据。 上传数据流以查询方式发起的系统中,计算机应用层总是通过数据上传API尝试读取数据。当单 片机没有数据需要上传时,计算机应用层就会一直等待(如果设置USB 读超时则会退出),实际上该 应用层程序的线程将会被操作系统挂起。当单片机需要上传数据时,应该将数据写入CH372批量端点 的上传缓冲区中,接着计算机应用层自动取走数据,然后CH372 芯片以中断方式通知单片机上传成功, 以便单片机继续上传后续数据。使用这种方式,建议用CH375SetBufUpload 设定内部缓冲上传。 上传数据流以伪中断方式发起的系统中,计算机应用层初始化时设置一个伪中断服务程序,然后 应用层就不需要再涉及到上传数据流。当单片机需要上传数据时,首先将数据写入批量端点的上传缓 冲区中,然后将中断特征数据写入中断端点的上传缓冲区中。在1 毫秒之内(理论值),与中断特征 数据对应的伪中断服务程序被激活,伪中断服务程序通知主程序调用数据上传API获得上传数据块。 在此期间,单片机将会收到CH372 芯片通知的两次中断,首先是中断端点上传成功中断,然后是批量 端点上传成功中断。
BOOL WINAPI CH375SetBufUpload( // 设定内部缓冲上传模式 ULONG iIndex, // 指定CH375设备序号,0对应第一个设备 ULONG iEnableOrClear ); // 为0则禁止内部缓冲上传模式,使用直接上传,非0则启用内部缓冲上传模式并清除缓冲区中的已有数据 // 如果启用内部缓冲上传模式,那么CH375驱动程序创建线程自动接收USB上传数据到内部缓冲区,同时清除缓冲区中的已有数据,当应用程序调用CH375ReadData后将立即返回缓冲区中的已有数据
LONG WINAPI CH375QueryBufUpload( // 查询内部上传缓冲区中的已有数据包个数,成功返回数据包个数,出错返回-1 ULONG iIndex ); // 指定CH375设备序号,0对应第一个设备
怎么VB的 demo 没有这些函数的呢?
我用的是 ch375,请问有没有这些功能。
ch375 是否有这些函数
BOOL WINAPI CH375SetBufUpload( // 设定内部缓冲上传模式 ULONG iIndex, // 指定CH375设备序号,0对应第一个设备 ULONG iEnableOrClear ); // 为0则禁止内部缓冲上传模式,使用直接上传,非0则启用内部缓冲上传模式并清除缓冲区中的已有数据 // 如果启用内部缓冲上传模式,那么CH375驱动程序创建线程自动接收USB上传数据到内部缓冲区,同时清除缓冲区中的已有数据,当应用程序调用CH375ReadData后将立即返回缓冲区中的已有数据
LONG WINAPI CH375QueryBufUpload( // 查询内部上传缓冲区中的已有数据包个数,成功返回数据包个数,出错返回-1 ULONG iIndex );
Demo程序里用到这些函数.你到网上下载CH375最新的驱动包(CH372DRV.ZIP).
我的单片机用以下:
LONG WINAPI CH375QueryBufUpload( // 查询内部上传缓冲区中的已有数据包个数,成功返回数据包个数,出错返回-1 ULONG iIndex );
总是返回 -1 , 是不是这个单片机设计有问题?
QueryBufUpload()是上位机的函数. 使用方法: 1.首先打开设备 2.在读写操作之前用CH375SetBufUpload(设备号,大于0的数值)设置内部缓冲上传模式 3.现在就可以用QueryBufUpload()查询缓冲区内数据包的个数,缓冲内没有数据包返回0. 4.取消缓冲上传模式用CH375SetBufUpload(设备号,0).