打印

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

[复制链接]
3461|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

沙发
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);
        }
}

使用特权

评论回复
5
秋天落叶| | 2012-1-17 19:03 | 只看该作者
能不能再说的详细一点

使用特权

评论回复
6
phz0008|  楼主 | 2012-1-18 10:15 | 只看该作者
就是用串口接收超时来解决收数据帧,然后检测串口接收超时标志,启动usb发送,从而解决在串口接收中断里copy数据到usb缓冲造成丢数的问题。

使用特权

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

本版积分规则

7

主题

124

帖子

0

粉丝