打印

ST 提供的範例 USBVirtualCOMPort 無法從ST 丟資料到PC

[复制链接]
1478|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sam_shie0715|  楼主 | 2013-10-21 15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我從ST的官網抓了USBVirtualCOMPort ,目前PC可以認到連接阜,從Terminal上丟資料也可以,但是我試了很多地方,要接ST的資料回傳到Terminal都無法成功,請教各位大大,可以指引明燈,讓我早入脫離苦海嗎??
沙发
hkcj| | 2013-10-21 18:52 | 只看该作者
不是很熟悉这一块   楼主   帮你看看先   不知道能不能发现问题   顶一个

使用特权

评论回复
板凳
jjjkkk00| | 2013-10-21 18:59 | 只看该作者
本帖最后由 jjjkkk00 于 2013-10-21 19:00 编辑

我在STM32F103ZE -EK的开发板上试运行过,虚拟串口可以用USART1口&USB与笔记本相互通信。

建议你再尝试下!

使用特权

评论回复
地板
mingjiezhong| | 2013-10-21 23:28 | 只看该作者
楼主学习方法不行,有现成的范例,自己只需要根据自己需要改一下就可以了

使用特权

评论回复
5
outstanding| | 2013-10-22 11:01 | 只看该作者
LZ怎么是繁体字?:lol

使用特权

评论回复
6
sam_shie0715|  楼主 | 2013-10-24 11:55 | 只看该作者
以解決了 !!!! 在 main.c 裡面 增加
if(ok_flag = enable)
{
     unsigned char *ptemp = NULL;
     ptemp = pbuffer_in_usb;
     UserToPMABufferCopy(ptemp, ENDP1_TXADDR, 3);//usart_2_usb_count);
     SetEPTxCount(ENDP1, 3);
}

ok_flog是自己新增,意思是當我完成接受buffier_out資料(來自於PC端的rs232值)之後,設定ok_flag = enable,

在hw_config.c
void usb_2_usart_send_data(void)
{
    if (count_out == 0)
   {
        USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
        SetEPRxValid(ENDP3);
        ok_flag=1;   // < --- 此為新增
   }
   else
   {
          USART1->DR = *pbuffer_out_usart & (uint16_t)0x01FF;
          pbuffer_out_usart++;       
          count_out--;
   }
心得 : 這個問題我卡的有點久,慚愧慚愧,不過 ST網站上的範例,真的不是百分百的適用,為什麼要這樣新增?? 因為原生的以下程式的問題 :
void usart_2_usb_send(void)
{
    unsigned char *ptemp = NULL;
    unsigned char * temp1;
    unsigned int temp2;
    if (pbuffer_in_usb == &buffer_in[BUFFER_SIZE])
    pbuffer_in_usb = buffer_in;
    temp1 = pbuffer_in_usart;
    if(pbuffer_in_usb == temp1)
    {
        usart_2_usb_process = WAIT_USART2USB_END;                // no data needed to send from USB
        usart_2_usb_complete = TRUE;                                                                       
        return;     // 一值卡在這邊 return
    }
    else if(pbuffer_in_usb > temp1)                           // if the     pbuffer_in_usart is rollback
    {
        usart_2_usb_count = &buffer_in[BUFFER_SIZE] - pbuffer_in_usb;
    }
    else
    {
        temp2 = (unsigned int)pbuffer_in_usart;
        temp2 = temp2 - (unsigned int)pbuffer_in_usb;
        usart_2_usb_count = temp2;
    }
    if (usart_2_usb_count > VIRTUAL_COM_PORT_DATA_SIZE)
    {
        ptemp = pbuffer_in_usb;
        UserToPMABufferCopy(ptemp, ENDP1_TXADDR, VIRTUAL_COM_PORT_DATA_SIZE);
        SetEPTxCount(ENDP1, VIRTUAL_COM_PORT_DATA_SIZE);
        usart_2_usb_count -= VIRTUAL_COM_PORT_DATA_SIZE;
        pbuffer_in_usb += VIRTUAL_COM_PORT_DATA_SIZE;
    }
    else
    {
        ptemp = pbuffer_in_usb;
        UserToPMABufferCopy(ptemp, ENDP1_TXADDR, usart_2_usb_count);
        SetEPTxCount(ENDP1, usart_2_usb_count);
        temp2 = usart_2_usb_count;
        pbuffer_in_usb += temp2;
        usart_2_usb_count = 0;   
    }
    usart_2_usb_process = WAIT_USART2USB_END;
    SetEPTxValid(ENDP1);
}
請問各位大大有比較熟捻這段code的人 可以大家一起討論這段的問題嗎??

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

1

粉丝