最新本人有个项目用到USB的虚拟串口,并且MCU已经选择好是F4系列的。 在板子发出去加工这段时间,我就拿F103的战舰板进行调试,DEMO是原子哥的虚拟串口驱动程序,在这里我
就碰到了几个问题。
问题:在程序中有个变量叫USB_USART_RX_STA。BIT15是接收完成标志,BIT14的接收到0x0d标志。这个标志
位是根据数据是否是0x0d,0x0a进行置位。但是问题来了,为什么标志1这里就能判断出接收到了0x0d,然后我把整个工程里面
搜了一下0x0d,判断等于0x0d的进行置位的,没有找到。
这个量程是把0x0d,0x0a作为结束符,然后对接收到数据进行打印.。我的问题是0x0d,0x0a是如何触发标志位的!
后来我仔细一想,F1的虚拟串口驱动和F4的虚拟串口程序能相互移植吗?搜了一圈,貌似是不能的!那我这时候把F1的调试出来
有毛用?去网上搜了一圈,貌似是有点区别的,请问各位仁兄有F4系列的虚拟串口实验的文档和例程(我去原子哥的F429和F407盘里找了
没找到相关教程)发上来分享学习一下。
另外,在F1的USB里,DP是需要电阻进行上拉的。而F4的USB接口,直接接上去就可以。
反正,我觉得USB虚拟串口还真的有点麻烦,想要真正理解还要花点功夫。
[mw_shl_code=applescript,true]for(i=0;i<Nb_bytes;i++)
{
res=data_buffer;
if((USB_USART_RX_STA&0x8000)==0) //接收未完成
{
if(USB_USART_RX_STA&0x4000) //接收到了0x0d,标志1
{if(res!=0x0a)USB_USART_RX_STA=0;//½óêÕ′íÎó,ÖØD¿aê¼
else USB_USART_RX_STA|=0x8000; //½óêÕíê3éáË,½óêÕ±ê־λÖÃÎa1
}
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ê¼½óêÕ
}
}
}
} [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1.其实你贴的代码已经告诉了这个问题的答案:为什么标志1这里就能判断出接收到了0x0d?重点注意这几处 2. “我的问题是0x0d,0x0a是如何触发标志位的”当你使用串口助手来做这个例程测试的时候要勾选“发送新行的”当你发送数据给板子的时候 ,经过USB虚拟串口就会收到0x0d 0x0a
没移植过了,不好说另外
一周热门 更多>