打印
[STM32F0]

F072 虚拟串口使用中需要注意的Bug (1)

[复制链接]
1168|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seawwh|  楼主 | 2016-6-11 22:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
F072 虚拟串口使用中需要注意的Bug (1)

  最近在F072的USB 虚拟串口编程中发现通信不稳定现象,向主机批量发送数据时会有阻塞。
  代码是移植ST 的库:STM32F0x2xx USB FS device library  v1.0.0
  F072 使用内部48MHz 振荡器工作。


1. 首先怀疑是F072 内部48M振荡器不稳造成的,看了一下F072 的CRS功能的默认配置,这个误差不会很大,F072会通过USB的SOF帧同步校准。
2. 再考虑是不是64字节整包发送完毕必须紧跟一个0字节空包问题,这个问题在原来F013的虚拟串口开发中遇到过,看了一下代码
   发现这次的usbd_cdc_core.c 中已经注意到这个问题,
         /*Send zero-length packet*/
        DCD_EP_Tx (pdev, CDC_IN_EP, 0, 0);
   测试发送64字节的数据包是好的。
3. 又怀疑了下列可能: 中断保护问题,CDC_IN_FRAME_INTERVAL的选择问题等,似乎都不能根本的解决问题。

   无奈只得阅读跟踪代码,后来发现Bug所在:

  在 usbd_cdc_core.c 中的函数 usbd_cdc_DataIn 有两句话:
        APP_Rx_length = 0;
        if (APP_Rx_length == CDC_DATA_IN_PACKET_SIZE) last_packet = 1;
  显然,这是一个永远不会成立的比较语句。将这两句调换顺序:

        if (APP_Rx_length == CDC_DATA_IN_PACKET_SIZE) last_packet = 1;
        APP_Rx_length = 0;
  再测试通信稳定。


  注: usbd_cdc_core.c 的版本 version V1.0.1   
沙发
zhuotuzi| | 2016-6-11 22:56 | 只看该作者
可能只是部分问题。

使用特权

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

本版积分规则

145

主题

368

帖子

0

粉丝