jheng 发表于 2021-9-15 14:18

HC32F460 使用usb_dev_cdc例程2.1.0库出错

虚拟串口能以识别连接,反复测试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

/**
*******************************************************************************
** \brief USART1 RX irq callback function.
**
** \param None
**
** \retval None
**
******************************************************************************/
static void USART1_RX_Callback(void)
{
    uint8_t data;
          if(USART_GetStatus(M4_USART1,UsartRxNoEmpty))
                {
                      data =USART_RecData(M4_USART1);       
                                        RecTimeOut = 0;       
          if(RecLen<100)
                                        {
                                          usart_rec[ RecLen ] = data;
                                          RecLen++;       
                                        }                                               
                                               
                }
                if (Set == USART_GetStatus(M4_USART1, UsartFrameErr))
    {
      USART_ClearStatus(M4_USART1, UsartFrameErr);
    }

    if (Set == USART_GetStatus(M4_USART1, UsartParityErr))
    {
      USART_ClearStatus(M4_USART1, UsartParityErr);
    }

    if (Set == USART_GetStatus(M4_USART1, UsartOverrunErr))
    {
      USART_ClearStatus(M4_USART1, UsartOverrunErr);
    }
       
}

binoo7 发表于 2021-9-18 08:30

楼主来试一下吧

jheng 发表于 2021-9-23 19:17

本帖最后由 jheng 于 2021-9-23 19:19 编辑

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

binoo7 发表于 2021-9-24 12:22

jheng 发表于 2021-9-23 19:17
不是中断问题,是例程波特率配置问题@binoo7

如果是波特率的话,那就需要你设置总线了,因为总线频率直接影响了波特率
页: [1]
查看完整版本: HC32F460 使用usb_dev_cdc例程2.1.0库出错