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) //½óêÕÎ′íê3é
{
if(USB_USART_RX_STA&0x4000) //½óêÕμ½áË0x0d
{
if(res!=0x0a)USB_USART_RX_STA=0;//½óêÕ′íÎó,ÖØD¿aê¼
else USB_USART_RX_STA|=0x8000; //½óêÕíê3éáË
}else //»1ûêÕμ½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;//½óêÕêy¾Y′íÎó,ÖØD¿aê¼½óêÕ
}
}
}
}
}
看了原子哥的串口实验,现在改写他的USB虚拟串口实验,去掉0X0A 0X0D结尾的协议,就是收到一个数字01不打回车换行就能直接控制IO口输出高低电平。我串口的改成功了,可是USB的不知道怎么改。我把判断结尾是不是0X0A 0X0D if语句去掉!我打01 IO口都不听话了!求帮助啊,新手。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
非常感谢
直接用软件延时,。在延时里查询是否有数据接收,有则重新刷新延时时间,没有延时完成就退出 ???
不知道您说的软件延时是什么意思? 大致想了一下思路,应该是这样的
void uart_isr( void )
{
打开10ms定时器
10msTimerCnt = 0
将数据存进buffer
}
void 10mstimer_isr( void )
{
SendMessage //发送串口接收完成消息
关闭10ms定时器
}
int main( )
{
while( 1 )
{
Message_Handler(); //处理消息
...
}
return 0
}
具体超时时间,设置成多少,也要根据波特率来进行设定。原子哥的GPS模块例程中,好像也有串口超时的操作。
有什么问题,还请及时讨论。
USB有CDC类,就是虚拟串口的类。
一周热门 更多>