hoho 解决了关于stm32 Virtual COM Port Demo丢数问题并uart超时功能

[复制链接]
4117|5
 楼主| phz0008 发表于 2012-1-16 16:12 | 显示全部楼层 |阅读模式
本帖最后由 phz0008 于 2012-2-7 17:12 编辑

void SendRecvTimeOut(void)
{

uint8_t temp[RADAR_BUF_SIZE];

uint8_t i=0;

if ( UartDataReadyFlag )

{

UartDataReadyFlag=0;

i =QueueGetDataCount(&g_RecvQueue);

count_in=i;

if ( count_in==UartRecvBytes(&temp[0],i))
  //如果有数据

{
/*分三步:1.想缓冲区填入数据 2.设定usb数据计数器 3.设置usb输出有效
  */

  UserToPMABufferCopy(temp, ENDP1_TXADDR, count_in);
   //这里导致串口波特率加快后丢数
  SetEPTxCount(ENDP1, count_in);
//设定usb数据计数器
  SetEPTxValid(ENDP1);
//设置usb输出有效


//
UartSendBytes(temp,count_in);


}

}
}

平台  stm3210b-lk1  测试目前没发现丢数。呵呵。无聊作者玩,恭请大家拍砖。
附件里有生成的hex文件

VirtualCOMPort.zip

9.94 KB, 下载次数: 61

 楼主| phz0008 发表于 2012-1-16 16:13 | 显示全部楼层
//
UartSendBytes(temp,count_in);
这句是调试用的
 楼主| phz0008 发表于 2012-1-16 16:15 | 显示全部楼层
其他需要修改的地方见其他帖子
 楼主| phz0008 发表于 2012-1-17 14:38 | 显示全部楼层
void ISR_USART_RXC(void)
{
        uint8_t c=USART_ReceiveData(USART1) & 0xFF;
        QueueInput(&g_RecvQueue,c);
//#ifdef UartTimeOut
        UartTimeoutFlag=1;                                                          //启动超时计数器
        WaitForUartCounter=0;                                          //清超时计数器  //10ms
//#endif
}

//发送中断
void ISR_USART_TXC(void)
{
        if ( QueueGetDataCount(&g_SendQueue)>0 )//如果发送缓冲队列不空
        {
                USART_SendData(USART1, QueueOutput(&g_SendQueue));
        } else                //否则关闭发送中断
        {
                // disable TX interrupt if nothing to send
                USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
        }
}
秋天落叶 发表于 2012-1-17 19:03 | 显示全部楼层
能不能再说的详细一点
 楼主| phz0008 发表于 2012-1-18 10:15 | 显示全部楼层
就是用串口接收超时来解决收数据帧,然后检测串口接收超时标志,启动usb发送,从而解决在串口接收中断里copy数据到usb缓冲造成丢数的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

124

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部