修改原子个USB串口协议失败了,求帮助

2019-10-16 02:55发布

void USB_To_USART_Send_Data(u8* data_buffer, u8 Nb_bytes)
{
        u8 i;
        u8 res;
        for(i=0;i<Nb_bytes;i++)
        {  
                res=data_buffer[i];
                if((USB_USART_RX_STA&0x8000)==0)                //&#189;óê&#213;&#206;′íê3é
                {
                        if(USB_USART_RX_STA&0x4000)                        //&#189;óê&#213;μ&#189;á&#203;0x0d
                        {
                                if(res!=0x0a)USB_USART_RX_STA=0;//&#189;óê&#213;′í&#206;ó,&#214;&#216;D&#194;&#191;aê&#188;
                                else USB_USART_RX_STA|=0x8000;        //&#189;óê&#213;íê3éá&#203;
                        }else //&#187;1&#195;&#187;ê&#213;μ&#189;0X0D
                        {       
                                if(res==0x0d)USB_USART_RX_STA|=0x4000;
                                else
                                {
                                        USB_USART_RX_BUF[USB_USART_RX_STA&0X3FFF]=res;
                                        USB_USART_RX_STA++;
                                        if(USB_USART_RX_STA>(USB_USART_REC_LEN-1))USB_USART_RX_STA=0;//&#189;óê&#213;êy&#190;Y′í&#206;ó,&#214;&#216;D&#194;&#191;aê&#188;&#189;óê&#213;       
                                }                                       
                        }
                }   
        }  
}

看了原子哥的串口实验,现在改写他的USB虚拟串口实验,去掉0X0A 0X0D结尾的协议,就是收到一个数字01不打回车换行就能直接控制IO口输出高低电平。我串口的改成功了,可是USB的不知道怎么改。我把判断结尾是不是0X0A 0X0D if语句去掉!我打01  IO口都不听话了!求帮助啊,新手。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
东北小辉辉
1楼-- · 2019-10-16 05:43
 精彩回答 2  元偷偷看……
小叶
2楼-- · 2019-10-16 10:36
东北小辉辉 发表于 2016-12-12 11:35
大概明白楼主的意思,楼主应该是需要一个判断串口接收结束的标志,可以考虑用串口接收超时来做,比较简单。 ...

非常感谢
萝卜头
3楼-- · 2019-10-16 16:33
东北小辉辉 发表于 2016-12-12 11:35
大概明白楼主的意思,楼主应该是需要一个判断串口接收结束的标志,可以考虑用串口接收超时来做,比较简单。 ...

直接用软件延时,。在延时里查询是否有数据接收,有则重新刷新延时时间,没有延时完成就退出 ???
东北小辉辉
4楼-- · 2019-10-16 17:34
萝卜头 发表于 2016-12-12 13:13
直接用软件延时,。在延时里查询是否有数据接收,有则重新刷新延时时间,没有延时完成就退出 ???

不知道您说的软件延时是什么意思? 大致想了一下思路,应该是这样的
void uart_isr( void )
{
    打开10ms定时器
    10msTimerCnt = 0
    将数据存进buffer
}
void 10mstimer_isr( void )
{
    SendMessage    //发送串口接收完成消息
    关闭10ms定时器
}

int main( )
{
    while( 1 )
    {
        Message_Handler();        //处理消息
        ...
    }
    return 0
}
具体超时时间,设置成多少,也要根据波特率来进行设定。原子哥的GPS模块例程中,好像也有串口超时的操作。
有什么问题,还请及时讨论。
东北小辉辉
5楼-- · 2019-10-16 19:55
另外,不是很明白楼主标题写的“USB串口协议”是什么意思,USB就是USB,串口就是串口,怎么会搞混呢。
USB有CDC类,就是虚拟串口的类。
正点原子
6楼-- · 2019-10-16 23:27
 精彩回答 2  元偷偷看……

一周热门 更多>