[技术问答] HC32F460 使用usb_dev_cdc例程2.1.0库出错

[复制链接]
17577|18
 楼主| jheng 发表于 2021-9-15 14:18 | 显示全部楼层 |阅读模式
虚拟串口能以识别连接,反复测试RX,TX短接一切正常,数据有发送返回。一旦接外部串口,数据错乱。特意用uart_dma例程跑了一下,硬件没有问题。国产的配套技术怎么就这么跟不上呢到处是问题还得不到解决,真烂
daichaodai 发表于 2021-9-16 07:53 来自手机 | 显示全部楼层
接外部串口什么意思,你不是用USB虚拟串口嘛?
martinhu 发表于 2021-9-16 09:15 | 显示全部楼层
抓波形,看看你的外部串口的波形什么样子,之前还有人的外部串口波形,低电平宽度只有高电平宽度的1/2,能收发才怪
 楼主| jheng 发表于 2021-9-16 10:43 | 显示全部楼层
daichaodai 发表于 2021-9-16 07:53
接外部串口什么意思,你不是用USB虚拟串口嘛?

虚拟串口总得找另一个串口通讯吧,一个串口怎么通讯
 楼主| jheng 发表于 2021-9-16 10:44 | 显示全部楼层
martinhu 发表于 2021-9-16 09:15
抓波形,看看你的外部串口的波形什么样子,之前还有人的外部串口波形,低电平宽度只有高电平宽度的1/2,能 ...

用通讯例程跑过了,硬件没问题
 楼主| jheng 发表于 2021-9-16 10:47 | 显示全部楼层
我就比较纳闷,这些公布的例程到底原厂有没有测试过,对用户可谓极不负责任
binoo7 发表于 2021-9-16 13:27 | 显示全部楼层
这个跟你说一下吧,
第一:你在串口中断里增加清除异常标志的处理,有好几个异常,都要清理了,要不然串口就不能用了
第二:串口中断时只读取数据,不要做过多的操作,要不然也会引起异常,此时你的串口就不能进中断了
第三:如果你想验证我说的是不是对的,可以在串口中断中增加延时函数,不用太多,延时1秒,你试试看
遇到问题不要慌,总会解决的
m564522634 发表于 2021-9-16 13:47 | 显示全部楼层
我觉得你喷国产烂的时候顺便把技术水平提高下吧, 你串口短接USB都可以给你转发出去,那说明USB这块正常,出问题的是你单片机串口程序这一块,喷烂可以麻烦喷那点子上,知道问题出在哪里,是库的问题还是你自己使用方法的问题
 楼主| jheng 发表于 2021-9-16 14:03 | 显示全部楼层
m564522634 发表于 2021-9-16 13:47
我觉得你喷国产烂的时候顺便把技术水平提高下吧, 你串口短接USB都可以给你转发出去,那说明USB这块正常, ...

2.1.0的库你可以试一下,没有实践过不要在这说大话
 楼主| jheng 发表于 2021-9-16 14:04 | 显示全部楼层
m564522634 发表于 2021-9-16 13:47
我觉得你喷国产烂的时候顺便把技术水平提高下吧, 你串口短接USB都可以给你转发出去,那说明USB这块正常, ...

就问你,官方出来的库,为啥调试不对
m564522634 发表于 2021-9-17 18:27 | 显示全部楼层
jheng 发表于 2021-9-16 14:04
就问你,官方出来的库,为啥调试不对

我没说官方库就一点问题也没有呀,st的库还有bug呢, 但你先把问题至少定位到是串口通信问题,还是USB 问题在做决定呀, 按你的描述 TX,RX 短接 USB 可以转发出去,外接串口后发送数据是乱码, 那你先要确认你外部输入的串口数据已经是错误了,还是USB转的时候错误,如果单片机接收到外部串口数据已经是错误的 那和官方的USB库有什么关系, 你先确认了问题范围在喷。
binoo7 发表于 2021-9-18 08:27 | 显示全部楼层
好啦,别吵了,我觉得大家都没错,发现问题解决了就好了,其实我开始用这个串口的时候也感觉不太习惯,因为如果串口中断处理不及时就会有报错的情况,导致串口接收不进中断,后来就把所有的异常都清理一次就好了,可是还是想知道到底是哪个异常引起的,然后就一步步仿真,终于找到是延时那个处理的问题,国产毕竟才起步,需要我们共同来完善
binoo7 发表于 2021-9-18 08:29 | 显示全部楼层
  1. /**
  2. *******************************************************************************
  3. ** \brief USART1 RX irq callback function.
  4. **
  5. ** \param [in] None
  6. **
  7. ** \retval None
  8. **
  9. ******************************************************************************/
  10. static void USART1_RX_Callback(void)
  11. {
  12.     uint8_t data;
  13.           if(USART_GetStatus(M4_USART1,UsartRxNoEmpty))
  14.                 {
  15.                       data =USART_RecData(M4_USART1);       
  16.                                         RecTimeOut = 0;       
  17.           if(RecLen<100)
  18.                                         {
  19.                                           usart_rec[ RecLen ] = data;
  20.                                           RecLen++;       
  21.                                         }                                               
  22.                                                
  23.                 }
  24.                 if (Set == USART_GetStatus(M4_USART1, UsartFrameErr))
  25.     {
  26.         USART_ClearStatus(M4_USART1, UsartFrameErr);
  27.     }

  28.     if (Set == USART_GetStatus(M4_USART1, UsartParityErr))
  29.     {
  30.         USART_ClearStatus(M4_USART1, UsartParityErr);
  31.     }

  32.     if (Set == USART_GetStatus(M4_USART1, UsartOverrunErr))
  33.     {
  34.         USART_ClearStatus(M4_USART1, UsartOverrunErr);
  35.     }
  36.        
  37. }
binoo7 发表于 2021-9-18 08:30 | 显示全部楼层
楼主来试一下吧
 楼主| jheng 发表于 2021-9-23 19:17 | 显示全部楼层
本帖最后由 jheng 于 2021-9-23 19:19 编辑

不是中断问题,是例程波特率配置问题@binoo7  

评论

@jheng :例程跑的是200M的主频,UART的CLK来自PCLK/1,配置115200的波特率,他就能跑成功,你配置低于115200的波特率跑不成功,还要别人拿证据,你自己不会算波特率和UART CLK之间的关系为什么怪例程?不明白还让人拿证据,给你证据了你看明白了不?  发表于 2021-10-13 17:10
@wubangmi :你哪只眼睛看到例程的主频和波特率是匹配的,拿出证据来  发表于 2021-10-13 10:11
波特率问题为啥怪例程呢,例程主频和波特率是匹配的,自己改了主频缺煤改波特率导致没跑通,那就是自己对华大芯片不了解  发表于 2021-10-9 15:27
binoo7 发表于 2021-9-24 12:22 | 显示全部楼层
jheng 发表于 2021-9-23 19:17
不是中断问题,是例程波特率配置问题@binoo7

如果是波特率的话,那就需要你设置总线了,因为总线频率直接影响了波特率
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

98

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部