发新帖本帖赏金 5.00元(功能说明)我要提问
返回列表
打印
[AT32F415]

下载官方USB虚拟串口的例程运行不成功--done

[复制链接]
6338|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 muyichuan2012 于 2021-9-13 09:22 编辑

之前采购了一批415C8芯片现在准备用上,用官方USB虚拟串口例程简单修改下载测试后发现无法成功,板子外部使用8M晶体,做了以下修改







修改了芯片型号、启动文件等,直接下载程序运行时连上USB后电脑上没有任何提示,也没有声音。在线调试发现连上程序根本无法进入中断程序,停止后程序一直在大循环处,试了很多次没有一次能成功,这里只需要测试虚拟串口所以并没有增加其他代码,想问一下还有哪里需要修改的?

使用特权

评论回复

打赏榜单

ArterySW 打赏了 5.00 元 2021-09-09
理由:BSP问题反馈属实。

沙发
shiweicl1314|  楼主 | 2021-9-6 14:40 | 只看该作者
现在论坛跟群里都没有售后支持了吗?

使用特权

评论回复
板凳
ArterySW| | 2021-9-6 15:43 | 只看该作者
shiweicl1314 发表于 2021-9-6 14:40
现在论坛跟群里都没有售后支持了吗?

这边有按照您说的修改方式修改测试,能正常枚举成功。是否还有其他修改的地方没有说明呢?又或者可以检查一下电路连接有没有问题,正常情况下,电路正常,就算代码有问题,PC端也会提示有设备插入,只是枚举失败,无法识别

使用特权

评论回复
地板
shiweicl1314|  楼主 | 2021-9-6 16:01 | 只看该作者
ArterySW 发表于 2021-9-6 15:43
这边有按照您说的修改方式修改测试,能正常枚举成功。是否还有其他修改的地方没有说明呢?又或者可以检查 ...

你好,首先感谢您的回复。

   我已经换过2片板子结果是一样的,代码就是上图修改的那些,没有在修改任何地方。我尝试在USB_D+上拉1.5k电阻到3.3V发现居然枚举成功了,但用串口助手发送数据测试发现数据传输不正常(返回数据过多或不正确,又或者一直重复返回0数据),而且加了上拉之后也不是每次都能枚举成功。

使用特权

评论回复
评论
shiweicl1314 2021-9-6 16:05 回复TA
如果拆掉D+的上拉电阻,USB连接到PC后就不会有任何的提示。 
5
shiweicl1314|  楼主 | 2021-9-6 16:20 | 只看该作者
ArterySW 发表于 2021-9-6 15:43
这边有按照您说的修改方式修改测试,能正常枚举成功。是否还有其他修改的地方没有说明呢?又或者可以检查 ...

还有我调试时发现在初始化USB库的过程中,程序经常会卡在这个延时函数中出不来,因为我在main()函数的while处设置断点发现程序经常无法运行到那里,单步发现程序卡在了下图位置。

使用特权

评论回复
6
ArterySW| | 2021-9-6 16:40 | 只看该作者
shiweicl1314 发表于 2021-9-6 16:01
你好,首先感谢您的回复。

   我已经换过2片板子结果是一样的,代码就是上图修改的那些,没有在修改任 ...

OTG在device模式下,内部自带上拉电阻,不需要额外提供上拉才对。您这边的现象比较奇怪,可否将使用的BSP版本告知一下,我们这边看呢能否复现您说的现象。

使用特权

评论回复
评论
shiweicl1314 2021-9-6 19:20 回复TA
就连内部的USB电阻都没起到作用,自己外加电阻反而偶尔成功了。 
shiweicl1314 2021-9-6 19:18 回复TA
那个例程在我这里无法正常运行。 
ArterySW 2021-9-6 18:08 回复TA
@shiweicl1314 :就是使用BSP里面的demo,和你修改点相同 
shiweicl1314 2021-9-6 17:14 回复TA
也可以把您测试OK的工程发给我试试,还有我这边的415应该是去年底采购的,会不会有版本区别? 
shiweicl1314 2021-9-6 17:11 回复TA
你好,BSP是我昨天刚从群里提供的地址下载的,AT32F4xx_StdPeriph_Lib_V1.3.1.zip 
7
shiweicl1314|  楼主 | 2021-9-6 20:10 | 只看该作者
ArterySW 发表于 2021-9-6 16:40
OTG在device模式下,内部自带上拉电阻,不需要额外提供上拉才对。您这边的现象比较奇怪,可否将使用的BSP ...

我换了几块新板子结果都是一样,我现在基本可以肯定这个BSP有BUG,我测试403RC跟403ARC都是一切正常,唯独415C8T7不行。

使用特权

评论回复
8
muyichuan2012| | 2021-9-7 08:00 | 只看该作者
请问你用的bsp版本是?

使用特权

评论回复
评论
shiweicl1314 2021-9-7 08:29 回复TA
群里下载的,AT32F4xx_StdPeriph_Lib_V1.3.1.zip 
9
自己的灌饼| | 2021-9-7 08:44 | 只看该作者
你的设置有问题的。仔细看看。

使用特权

评论回复
评论
shiweicl1314 2021-9-7 08:49 回复TA
哪里有问题? 
10
ArterySW| | 2021-9-7 09:36 | 只看该作者
shiweicl1314 发表于 2021-9-6 20:10
我换了几块新板子结果都是一样,我现在基本可以肯定这个BSP有BUG,我测试403RC跟403ARC都是一切正常,唯 ...

感谢您的反馈。对于您那边不能识别设备的问题,我们使用你所使用的BSP版本在AT-START板子上实验没有复现问题。但是对于您提到的收发数据问题,这边已找到问题原因;请按照如下修改代码,测试看看。

将usbd_cdc_vcp.c文件内的CDC_DataTx函数替换如下即可:

static uint16_t CDC_DataTx (void)
{
  uint16_t dwSendLen = 0;
        uint32_t SendPtr = 0;
  static uint8_t send0packet = 0;
  if (usb_txfifo.wrpointer == usb_txfifo.curpointer )
  {
    if(send0packet == 1)
    {
      USB_DCD_EPT_Tx (&USB_OTG_dev, CDC_IN_EP, &usb_txfifo.fifo[SendPtr] , 0 );
      send0packet = 0;
      return USB_DEVICE_OK;
    }
    else
    {
      return USB_DEVICE_FAIL;
    }
  }
       
        if ( usb_txfifo.wrpointer > usb_txfifo.curpointer )
        {
          dwSendLen = usb_txfifo.wrpointer - usb_txfifo.curpointer;
        }               
        else
        {
                dwSendLen = USB_FIFO_MAX - usb_txfifo.curpointer;
        }
        SendPtr = usb_txfifo.curpointer;
        if ( dwSendLen > 64 )
        {
                dwSendLen = 64;
        }
        usb_txfifo.curpointer += dwSendLen;
       
        if ( usb_txfifo.curpointer >= USB_FIFO_MAX )
                usb_txfifo.curpointer = 0;
  
  send0packet = 1;
  
  USB_DCD_EPT_Tx (&USB_OTG_dev, CDC_IN_EP, &usb_txfifo.fifo[SendPtr] , dwSendLen );
  return USB_DEVICE_OK;
}

使用特权

评论回复
评论
shiweicl1314 2021-9-7 13:11 回复TA
那这个问题就奇怪了,这个现象显然不可能是板子问题。 
ArterySW 2021-9-7 11:21 回复TA
@shiweicl1314我们已使用415C8T7实验,没有复现你的问题,枚举正常,不需要额外上拉电阻。如之前所说,415为OTG,在强制device模式下,芯片内部自带上拉,从设计上就是不需要额外加上拉电阻的。 
shiweicl1314 2021-9-7 10:21 回复TA
希望你们可以使用415C8T7这款芯片实际测试一下这个问题,谢谢。 
shiweicl1314 2021-9-7 10:20 回复TA
你好,替换了CDC_DataTx函数之后通讯问题解决了,目前测试通讯一切正常。但是还是必须外加1.5k电阻,否则PC不做任何提示。 
11
shiweicl1314|  楼主 | 2021-9-7 20:33 | 只看该作者
在没有连接USB数据线的时候给板子上电,之后万用表量D+上的电压发现是0V,也就是说明内部的电阻并没有开启。

使用特权

评论回复
12
shiweicl1314|  楼主 | 2021-9-7 22:42 | 只看该作者
测试发现通过程序主动写OTG_FS_DCTL寄存器的SFTDIS位,无论是置位还是执行清除操作,在D+管脚上始终都是0V电压,无法设置为高电平状态。



使用特权

评论回复
评论
shiweicl1314 2021-9-7 22:48 回复TA
这个测试结果是在没有连接USB数据线时测量芯片的D+管脚得出的。 
13
数据采集存储| | 2021-9-8 08:37 | 只看该作者
这个配置太详细了。

使用特权

评论回复
14
shiweicl1314|  楼主 | 2021-9-8 10:39 | 只看该作者
我感觉问题应该快要解决了,经过反复测试确定是D+内置电阻没有被使能,查看寄存器手册看到了这么一段话


在usb库的gpio初始化中看到PA9被设置为输入模式,于是我将VBUS接入高电平后发现USB被计算机识别了(断开高电平后USB跟计算机会失去连接),也就是此时D+的电阻发挥了作用,我想知道415的USB当做设备使用时PA9必须要做为输入模式并且接入高电平才会使能USB的内置电阻吗?

使用特权

评论回复
15
shiweicl1314|  楼主 | 2021-9-8 10:44 | 只看该作者
@ArterySW 麻烦您帮我看一下楼上

使用特权

评论回复
16
shiweicl1314|  楼主 | 2021-9-8 23:05 | 只看该作者
问题已经解决了。

使用特权

评论回复
17
自己造声卡| | 2021-9-10 10:14 | 只看该作者
这个帖子,太赞了。不错。

使用特权

评论回复
18
sparrow054| | 2021-10-9 14:02 | 只看该作者
好贴!非常的棒

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

60

帖子

2

粉丝