[技术问答]

HC32F460 使用usb_dev_cdc例程2.1.0库出错

[复制链接]
16632|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 | 显示全部楼层
/**
*******************************************************************************
** \brief USART1 RX irq callback function.
**
** \param [in] 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  

使用特权

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

如果是波特率的话,那就需要你设置总线了,因为总线频率直接影响了波特率

使用特权

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

本版积分规则

35

主题

98

帖子

0

粉丝