OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5725|回复: 14

F103虚拟串口问题

[复制链接]

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
发表于 2016-5-19 18:28:04 | 显示全部楼层 |阅读模式
5金钱
我用F103RCT6做了个虚拟串口,需要100K/S以上的速率,在例程上改的,如下,使用STM32不断给PC发送消息。串口助手并没有数据。[mw_shl_code=c,true]uint8_t data[32]={0};
u16 t,n;
int main(void)
{          
        delay_init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        uart_init(115200);
        LED_Init();
       
        delay_ms(1800);
        USB_Port_Set(0);
        delay_ms(700);
        USB_Port_Set(1);
        Set_USBClock();   
        USB_Interrupts_Config();   
        USB_Init();       

        while(1)
        {
                if(bDeviceState==CONFIGURED)
                {
                  for(t=0;t<32;t++)
                                {
                                        USB_USART_SendData(data[t]);
                                }       
                                if(n++==4000)//工作状态提示
                                {
                                        LED0=!LED0;
                                        n=0;
                                }
                }                               
        }
}[/mw_shl_code]
但是我把上面while循环中的程序改为如下:
[mw_shl_code=c,true] while(1)
        {
                if(bDeviceState==CONFIGURED)
                {
                  UserToPMABufferCopy( data, ENDP1_TXADDR, 32);
                        SetEPTxCount(ENDP1, 32);
                        SetEPTxValid(ENDP1);   
                                if(n++==4000)//工作状态提示
                                {
                                        LED0=!LED0;
                                        n=0;
                                }
                }                               
        }[/mw_shl_code]
能收到数据,大概33K/S的样子,改为64的数组,速度大概为64K/S,好像1ms发送一帧数据?但是和我的要求还差得远,但是这种方法数组长度最多64啊。网上搜了一圈,搞了好久还是没有解决,特来求助。

最佳答案

查看完整内容[请看2#楼]

弃用虚拟串口,直接用USB-bulk,上位机用LabVIEW读取
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
 楼主| 发表于 2016-5-19 18:28:05 | 显示全部楼层
弃用虚拟串口,直接用USB-bulk,上位机用LabVIEW读取
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
 楼主| 发表于 2016-5-20 09:22:45 | 显示全部楼层
自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶自顶
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
811
金钱
811
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-20 09:38:54 | 显示全部楼层
你发送100K个字节0xaa看看需要多少时间,我有个设计也想用到这样一个功能,不过我需要的速度更快,最好有700K字节/秒以上的速度
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
 楼主| 发表于 2016-5-20 14:11:35 | 显示全部楼层
xujian468 发表于 2016-5-20 09:38
你发送100K个字节0xaa看看需要多少时间,我有个设计也想用到这样一个功能,不过我需要的速度更快,最好 ...

你成功了吗?我真是一筹莫展啊,求指导
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
 楼主| 发表于 2016-5-20 16:16:05 | 显示全部楼层
网上搜了一圈,全速设备好像就是1ms发送一次,但是不明白这句话的意思“如果是64B的数据包,1ms最多只能有19个transaction”,这句话是说1ms最多可以发送19帧,还是一帧里最多可包含19个64B数据包?
回复

使用道具 举报

13

主题

201

帖子

0

精华

高级会员

Rank: 4

积分
671
金钱
671
注册时间
2015-4-26
在线时间
173 小时
发表于 2016-5-20 16:31:35 | 显示全部楼层
帮顶,自己试下不就知道了
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
 楼主| 发表于 2016-5-20 16:49:42 | 显示全部楼层
康仔呦 发表于 2016-5-20 16:31
帮顶,自己试下不就知道了

我不知道怎么写代码啊,我怎么试都是1ms一帧,一帧64B数据
回复

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2016-5-20 18:10:30 | 显示全部楼层
STM32的USB端点容量就是最大64B,这个可以去看手册,上面有写。
要学的话参考官方培训资料也不错 USB培训_Part2 USB IP及其库的使用 .pdf (2.74 MB, 下载次数: 48)
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
811
金钱
811
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-20 18:15:01 | 显示全部楼层
本帖最后由 xujian468 于 2016-5-20 18:58 编辑
NUAA-DW 发表于 2016-5-20 14:11
你成功了吗?我真是一筹莫展啊,求指导

for(i=0;i<10;i++)
{
       for(t=0;t<65535;t++)
      {
             USB_USART_SendData(0xaa);//以字节方式,发送给USB
       }
}
//发送655350个字节,将630K个字节看上位机接收需要多长时间,掐下秒表,据大神说速度可以达到600,700K,不知道是否是真的,过几天我玩玩看到底能达到多少
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
 楼主| 发表于 2016-5-23 10:56:55 | 显示全部楼层
yyx112358 发表于 2016-5-20 18:10
STM32的USB端点容量就是最大64B,这个可以去看手册,上面有写。
要学的话参考官方培训资料也不错

这个我都看过了,我只是想知道网上说的几百KB速度是怎么来的。
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
 楼主| 发表于 2016-5-23 10:59:04 | 显示全部楼层

我上面贴的程序就是这样的,不懂为什么用while循环发USB_USART_SendData串口助手收不到数据,UserToPMABufferCopy可以收到
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
 楼主| 发表于 2016-5-23 11:33:52 | 显示全部楼层
本帖最后由 NUAA-DW 于 2016-5-23 11:35 编辑
for(i=0;i<10;i++)
{
       for(t=0;t<65535;t++)
      {
             USB_USART_SendData(0xaa);//以字节方式,发送给USB
       }
}
//发送655350个字节,将630K个字节看上位机接收需要多长时间,掐下秒表,据大神说速度可以达到600,700K,不知道是否是真的,过几天我玩玩看到底能达到多少

现在可以发送了,但是我发现战舰例程的方法还达不到64K/s。
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
 楼主| 发表于 2016-5-23 16:49:11 | 显示全部楼层
今天试了下这个方法可以发送大于64B的数据,但是串口助手显示速度还是64K,说明分包之后每包分一帧发送,但是看网上说一帧可以发送多个数据包。[mw_shl_code=c,true]for(i=0;i<4;i++)
                {               
                        UserToPMABufferCopy(data+i*60, ENDP1_TXADDR, 60);
                        SetEPTxCount(ENDP1, 60);
                        SetEPTxValid(ENDP1);
                }        [/mw_shl_code]
发送240字节,分4次每次60字节。小弟我搞了好几天了,跪求指导如何把多个包放进一帧中。。
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
811
金钱
811
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-24 09:08:07 | 显示全部楼层
NUAA-DW 发表于 2016-5-23 10:59
我上面贴的程序就是这样的,不懂为什么用while循环发USB_USART_SendData串口助手收不到数据,UserToPMABu ...

USB_USART_SendData程序发送一个字节也收不到吗?那是你硬件没连接好吧,等今天我也去试试再来告诉你结果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-5 12:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表