STM32 F4虚拟串口相关

2019-07-20 06:44发布

      最新本人有个项目用到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;//&#189;óê&#213;′í&#206;ó,&#214;&#216;D&#194;&#191;aê&#188;
else USB_USART_RX_STA|=0x8000;        //&#189;óê&#213;íê3éá&#203;,&#189;óê&#213;±ê&#214;&#190;&#206;&#187;&#214;&#195;&#206;a1

                        }
                        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;       
                                }                                       
                        }
                }
        }  [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
peng1554
1楼-- · 2019-07-20 08:52
本帖最后由 peng1554 于 2018-8-13 18:33 编辑

1.其实你贴的代码已经告诉了这个问题的答案:为什么标志1这里就能判断出接收到了0x0d?重点注意这几处                                                        2. “我的问题是0x0d,0x0a是如何触发标志位的”当你使用串口助手来做这个例程测试的时候要勾选“发送新行的”当你发送数据给板子的时候 ,经过USB虚拟串口就会收到0x0d 0x0a



JQChris
2楼-- · 2019-07-20 12:48
 精彩回答 2  元偷偷看……
peng1554
3楼-- · 2019-07-20 18:27
JQChris 发表于 2018-8-13 19:09
一般串口调试助手里面加回车换行就是发数据时自带 ,然后在else里面,USB_USART_RX_STA这个变量有运算 ...

没移植过了,不好说另外

一周热门 更多>