|
用的是 STM32F407 芯片 ,使用USB 和上位机通讯 在一个函数里 switch(g_stUsbGet.ucData[3]) { case CMD_COMM_GETUSB: printf("\n Acmd 1"); HAL_Delay(60000); printf("\n cmd 1"); UsbCom_Usb_GetUsb(); break; 接受到上位机发送的数据后,然后执行相应的操作后,再返回数据,结果发现一个问题,当这个执行操作时间很长的时候,返回数据上位机接受不到了,我做了一个测试程序,只加1分钟延时,结果是一样的, UsbCom_Usb_GetUsb(); 函数里有CDC_Transmit_FS(pData+usIndex,ucLen)函数, 当上面的 HAL_Delay(60000) 去掉的时候,上位机接受数据没有问题,但是加这个延时,上位机就接受不到了,上位机也加一个延时再收,也还是收不到,我用BUSHOUND做试验,也是一样的,无论我读数据是发送后马上去读,还是等下位机发送后再读,都是一样的结果,不知道这个是什么原因啊 |
局部变量初始化时未赋值会导致什么后果
在 STM32CubeIDE 中使用 RTOS 代理
如何为ram变量分配固定地址
ST TOF问题请教
请问我的CubeMX为什么初始界面没有ai选项,进去之后也没有addnetwork?
ST Motor Control Workbench卡在如图界面,生成不了代码
SDIO 标致位 没有变
程序卡死在USB_EPStartXfer这里
SDIO 初始化 死在 __HAL_RCC_SDIO_CLK_ENABLE语句上
我现在使用STM32F446ZET6芯片,外挂了16m的片外SDRAM。想把程序在SDRAM中运行,一直尝试没有成功,希望得到帮助,是否有相关的例子或参考的文档
微信公众号
手机版
是上位机有超时时间,超时 就不接收了?或者接收直接扔掉了?
你的UsbCom_Usb_GetUsb()的具体实现是什么
有超时时间 但是 我加延时 再接受一样接受不到
void UsbCom_Send_Fun(unsigned char *pData,unsigned short int usLen) { unsigned char ucLen; unsigned char ret,ret1; unsigned short int usIndex;
ret = TRUE;
usIndex=0; do { if(usLen>64) { ucLen = 64; usLen = usLen -64; } else { ucLen = usLen; ret = FALSE; } g_ucUsbSendSta=TRUE; g_usUsbSendTimIndex=0; g_ucUsbSendTimFlag = TRUE; do { ret1=TRUE;
/ if(ucLen==64) { CDC_Transmit_FS(pData+usIndex,0); } //------------------------- /
}while(ret == TRUE);
printf("\n send ok "); }
你试试改成状态机写法或者直接上RTOS,usb状态可能因为Delay而不更新
没太明白,状态机写法是什么
我感觉应该是 你说的函数延时太长造成USB 更新不及时,但是 我没再 main 函数里找到 USB 的主函数,我的理解,USB 的状态 更新要么在MAIN里有一个 USB 主函数负责USB状态更新,要么就是通过USB中断实现,我检查过,我USB 的中断优先级已经设置成了0,如果是中断负责USB状态更新,那我延时多少也不应该有问题啊
[md]确实,暂时没看明白是哪里出问题了
没人知道原因么