精华内容
下载资源
问答
  • 一个正常,一个乱码; 解决:修改fifo大小 问题2:两个串口同时打开才可以正常通信 原因:usb缓冲区数据未被上位机走时,缓冲区满后会溢出,导致无法hcdc->TxState未清除。目前trick的方法是直接获取...

    参考https://blog.csdn.net/manshq163com/article/details/83184003

    问题1:两个串口无法同时发送数据;一个正常,一个乱码;

    解决:修改fifo大小

    问题2:两个串口同时打开才可以正常通信

    原因:usb缓冲区数据未被上位机读走时,缓冲区满后会溢出,导致无法hcdc->TxState未清除。目前trick的方法是直接获取上位机串口开关状态,如果关闭不发送数据。

    展开全文
  • 一个串口同时传输多个数据

    万次阅读 2016-05-02 16:29:12
    程序目标:实验中在调试程序时,需要在只用到一个串口的条件下,用上位机同时向单片机传送多个不同数据。 实现原理:1,用LabView编写的上位机,使用VISA向单片机中写入数据;多个数据之间用一些分隔符进行区分。 ...

    程序目标:实验中在调试程序时,需要在只用到一个串口的条件下,用上位机同时向单片机传送多个不同数据。
    实现原理:1,用LabView编写的上位机,使用VISA向单片机中写入数据;多个数据之间用一些分隔符进行区分。
    2,定义一个字符串USART_RX_BUF[]接收收据,然后在该字符串中查找相应的分隔符并得到它们在字符串中的位 置,最后根据这些位置从字符串中提取出相应的字符串,这样就可以得到在上位机中输出的几种不同的数据。
    LabView程序前面板
    这里写图片描述

    void USART1_IRQHandler(void) //串口1中断服务程序
        {
        u8 Res;
    #if SYSTEM_SUPPORT_OS//如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntEnter();    
    #endif
        if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)
            {
            Res =USART_ReceiveData(USART1); //读取接收到的数据
    
            if((USART_RX_STA&0x8000)==0)//接收未完成
                {
                if(USART_RX_STA&0x4000)//接收到了0x0d
                {
                    if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
                    else 
                    {
                        USART_RX_STA|=0x8000;//接收完成了 
                        LEN=USART_RX_STA&0x3FFF;
                    }
                }
                else //还没收到0X0D
                    {   
                    if(Res==0x0d)USART_RX_STA|=0x4000;
                    else
                        {
                        USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
                        USART_RX_STA++;
                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收      
                        }        
                    }
                }            
         } 
    #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
        OSIntExit();                                             
    #endif
    } 
    #endif  
    int main(void)
    {
        char *P,*I,*D;
        char FQ[12],KP[8],KI[8],KD[8];  
        u8 x,y,z;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
        uart_init(115200);//串口初始化为115200
        LCD_Init(); //初始化LCD    
    
        POINT_COLOR=BLUE;//设置字体为蓝色
    
        memset(FQ,'\0',sizeof(FQ)); //将字符数组设为空字符数组
        memset(KP,'\0',sizeof(KP));
        memset(KI,'\0',sizeof(KI));
        memset(KD,'\0',sizeof(KD));
    
    
        while(1)
        {
            if(USART_RX_STA&0x8000) //串口接收状态标志位就绪
            {
                LCD_Fill(30,250,230,250+16,WHITE); //清空指定区域
                LCD_Fill(30,270,230,270+16,WHITE);
                LCD_Fill(30,290,230,290+16,WHITE);
                LCD_Fill(30,310,230,310+16,WHITE);
    
                P=strrchr((char*)USART_RX_BUF,'p'); //查找字符串中字符'p'的位置,并返回最后一次指向该字符串的指针
                I=strrchr((char*)USART_RX_BUF,'i');         
                D=strrchr((char*)USART_RX_BUF,'d'); 
    
                x=(u8*)P-USART_RX_BUF;//得到字符'p'在字符串中的偏移量,从而得到第一段字符串的长度
                y=(u8*)I-(u8*)(++P);  //得到字符'i'在以P为首地址的字符串中的长度,从而得到第二段字符串的长度
                z=(u8*)D-(u8*)(++I);  
    
                memcpy(FQ,USART_RX_BUF,x); //从接受到的字符串中复制第一段字符串
                memcpy(KP,P,y);//从接受到的字符串中复制第二段字符串
                memcpy(KI,I,z);//从接受到的字符串中复制第三段字符串
    
                LCD_ShowString(30,250,200,16,16,(char*)FQ); //在LCD上显示第一段字符串
                LCD_ShowString(30,270,200,16,16,(char*)KP);
                LCD_ShowString(30,290,200,16,16,(char*)KI);
                LCD_ShowString(30,310,200,16,16,(++D));//在LCD上显示第四段字符串
    
                USART_RX_STA=0; //清空状态标志位
                for(i=0;i<USART_REC_LEN;i++)
                    USART_RX_BUF[i]=' '; //将接受的字符串清空
                memset(FQ,'\0',sizeof(FQ)); //将字符数组设为空字符数组
                memset(KP,'\0',sizeof(KP));
                memset(KI,'\0',sizeof(KI));
                memset(KD,'\0',sizeof(KD));
            }
            delay_ms(10);
        }
    }

    程序运行结果:LabView中输入的四种数据,在单片机中都分别实时显示在LCD屏幕上

    注意点:LabView中输入的字符串的长度最好不要大于定义的字符数组

    展开全文
  • 用“串口分身”完成多个应用访问同一台串口设备工具/原料安装软件创建“串口分身”注意事项 实际应用中,会遇到电脑中安装的多个软件要访问同一台串口设备的情景。 这时候可以使用虚拟串口工具软件,将物理串口化身...

    用“串口分身”完成多个应用访问同一台串口设备

    实际应用中,会遇到电脑中安装的多个软件要访问同一台串口设备的情景。

    这时候可以使用虚拟串口工具软件,将物理串口化身成多个虚拟串口,不修改应用程序的情况下方便使用。

    工具/原料

    MX虚拟串口软件

    MX虚拟串口官方下载:http://www.meixuannet.cn/

    安装软件

    下载完毕,按照提示安装软件

    创建“串口分身”

    切换到“串口分身”栏目,选择要添加的物理串口和虚拟串口。将真实串口分成多个虚拟串口。设置真实串口的波特率,虚拟串口自动识别任意波特率,故不需要设置。
    MX虚拟串口

    注意事项

    • 虚拟串口不需要设置波特率
    • 在云服务器上使用“串口服务端”时,需要服务器开通端口访问权限
    • 如果真实串口没有识别出来,重新插拔或检查是否有虚拟串口名称冲突

    美渲网络
    美渲网络,精美出品
    http://www.meixuannet.cn

    展开全文
  • 多个程序共享同一串口数据的实现

    千次阅读 2017-08-11 17:59:47
    比如我们有一个GPS设备,用串口的方式将数据传到电脑上了,我们想在多个应用程序中使用这个GPS数据。利用虚拟串口(VSPD如图1)这款软件,可以虚拟出成对的串口。例如,物理串口为COM1,利用VSPD
    

            有过串口编程经验的人都知道,串口是独占方式使用的,即有且只有一个应用实例能对一个串口进行打开、读写操作。但实际应用中,我们可能要在多个应用程序中对来自同一个串口的数据进行分析。比如我们有一个GPS设备,用串口的方式将数据传到电脑上了,我们想在多个应用程序中使用这个GPS数据。利用虚拟串口(VSPD如图1)这款软件,可以虚拟出成对的串口。例如,物理串口为COM1,利用VSPD将另一个虚拟出的串口,如COM2和物理串口COM1配对,效果如图2所示。


    图1 虚拟串口(VSPD)



    图2 将物理串口和虚拟出来的串口配成对


    经过这样的操作之后,由物理串口COM1发过来的数据,理论上可以在COM2口接收到(待验证)。但VSPD不支持将多对配对的虚拟串口同时连在一起,从而无法达到一个物理串口对多个虚拟串口的效果。这时我们可以用到另外一款很有用的软件,serial_splitter,这里用的v3.5破解版本,下载后(点击打开链接),若在win7下使用,请以管理员身份运行SSplitter.exe,否则找不到物理串口,笔者也是摸索了很久才成功,在此提醒一下大家。其界面如图3。serial splitter的功能比VSPD强大的多,不仅可以像VSPD那样,虚拟出配对的串口,还可以虚拟出单独的串口,可以虚拟出一对多、多对一的串口。下面简要介绍一下这款软件。


    图3 serial splitter界面图

    这里我们想要获取物理串口(如COM1)上的数据给多个应用程序使用,可以利用一个物理串口对应多个虚拟串口来实现。具体操作步骤如下:首先在上图空白区中的Serial Splitter上右键->选择Add buddle,这是出来了一个新的配对项New buddle,我们可以将其重命名为mybuddle,之后点击mybuddle前的“+”号,然后右键input->选择Add port->选择Add real serial port->选择真实存在的串口(如COM1)。到这里,数据源就设置好了,接下来设置数据输出端口。同理设置output,此时端口添加时,我们选择Add virtual serial port,这里添加几个虚拟的串口,如COM4、COM5、COM6、COM7……若虚拟串口本身不存在,则此操作会帮我们创建出虚拟的串口。

    完成后的效果图如图4所示,完成了上述操作后,我们就可以不同的应用程序中分别打开虚拟的串口COM5、COM6、COM7……,读出来的数据当然也是来自于COM1接收的数据,就不用担心COM1被独占的困扰了。


    展开全文
  • java串口通讯,可实现javaWeb页面控制串口,调用串口数据,发送串口指令 ...本来计划是让.net工程师给我们写控件了事,我们也懒得去研究什么串口通讯、485协议啥的,但因为系列原因与.net工程师解除...
  • 最近在做一个陀螺仪的原始数据读取遇到了串口数据读取问题,在网上查阅了一篇技术文档,觉得写的不错,分享一下! 1.1前言  通常使用以下函数来通过Windows系统来对外围设备进行通信,做串口方面的程序,使用...
  • 回顾Qt调用串口设备

    千次阅读 2018-02-22 22:41:31
    最近一直在学习如何使用 Qt5.10 编写一些小程序,学的很很杂,难免有些容易遗忘的东西。今天就打算用写博客的形式做一下小小的回顾,把之前写过的...环境配置 Qt5中有一个QSerialPort类,使用它我们就可以方便的...
  • 买了一个无线通信模块,在windows下还要装驱动才能。在windows下测试无线模块没问题后,在ubantu14.2中测试怎么读串口。步骤如下:1.查看看系统信息dmesg | tail -f 输出如下:[12812.940613] usb 1-9: New USB ...
  • C++串口同步和异步的读取与串口设备编程

    万次阅读 多人点赞 2016-09-19 23:06:45
    本文主要讲述如何对串口进行高效率的读写,当串口中数据到达时立即读取进行处理,以及如何将该方法运用到串口设备编程中。为了使得程序更加清晰文中的代码去除了异常处理的情况。文中加粗的文字相应的比较重要,需要...
  • 这是一个电脑称的方法,一般用COMM口连接的电子设备都可参考。 如果是对串口参数不确定的,可以网上找个串口测试工具,轻松测出串口参数   网上搜索MSCOMM32.OCX 1.将上面的MSCOMM32.OCX保存到系统目录下C:\...
  • java读取串口设备信息

    千次阅读 2015-05-08 11:39:40
    一个最简单的从串口设备读取信息实例: 关于读取串口信息的环境配置过程网上很,大致就是: 下载javacomm20-win32.zip,解压缩。 截取网上一段配置过程: 1.网上下载javacomm20-win32.zip后,解压之。此时...
  • 开发串口程序首先要求你的设备需要支持串口通信,可以在设备上装一个App端的串口工具来检测一下 链接:https://pan.baidu.com/s/11L4aZI9orBhbnztka6H1Og 提取码:bvot 或者在电脑端下载一个友善串口助手检测一下...
  • 实现虚拟串口设备收发数据

    千次阅读 2020-05-25 09:43:57
     这里的虚拟串口设备并不是开发板上的外设,而是由驱动模拟出来的一个fifo缓冲区,在功能上类似串口外设,可以实现数据的收发,收发对象是用户层和内核层,在一定程度上可以说是弱化的具有内环回作用的串口。...
  • 给android设备增加串口功能

    万次阅读 多人点赞 2012-03-10 15:36:43
    给android设备增加串口功能 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:MDK4.23 功能: 打开Android手机或者...
  • VB串口通信源码210

    千次下载 热门讨论 2013-10-15 11:32:27
    027、VB串口程序,,是一个串口使用例程,对初学者有用,特别是工控类的 028、VB串口传输文本,实现2台PC间的通信,类似简单的聊天工具 029、VB串口一个电子称的项目 030、VB串口调试程序,用于通过串口控制松下空调测试 ...
  • 【QT】编写一个简易的串口软件

    千次阅读 2018-11-23 17:39:05
    简述 QT学了一点发现学不进去,索性看看能不能直接撸个程序,于是就有了这个简易的串口软件… ...新建一个Qt项目 既然用到串口,那么我们就要在.pro里增加串口的库 QT += serialport # 串口库...
  • 一个简单的串口接收数据程序

    千次阅读 2014-12-03 18:47:46
    最近才接触一些c++的编程,对于串口的API也不是太了解,看着别人的程序编了一个小demo,赋值,粘贴,可以直接运行,注释有一部分是API的解释。 #include #include #include HANDLE hCom; //在Windows程序中...
  • Windows驱动开发——虚拟串口设备

    千次阅读 2013-10-14 19:45:24
    1、DDK串口开发框架 DDK对串口驱动提供了专门接口。只要编写的驱动满足这些接口,并按照串口标准的命名方法,不管是真实的串口设备,还是...这个设备一个标准的串口设备。用标准的串口调试工具都可以与这个设备
  • 单片机串口接收字节

    千次阅读 2019-05-02 22:28:13
    感觉串口多字节接收部分的逻辑相对于配置寄存器跟串口回复来说,是有点难度的——寄存器配置基本上都是死的,串口回复字节跟回复一字节只是一个循环。 串口接收程序是基于串口中断的,单片机的串口每次...
  • linux系统下串口设备和串口号绑定

    千次阅读 2020-09-20 22:47:15
    3.7 linux系统下串口设备和串口号绑定 3.7.1 问题由来 ​在ROS小车的开发过程中,需要使用ROS...在linux系统下,虽然每一个固定的端口可能由于外接设备启动的时间差异分配的ttyUSB*不同,但是对于每一个固定的端口,
  • 刚好过完年到现在没有写博客, 贴点很久以前的东西骗点...类似于Arduino Uno, 只有一个串口的Arduino板子, 并不妨碍我们读取TFmini的数据, 只需要连接TFmini的TX到Arduino的RX即可, 不影响Arduino的TX向PC发数据, ...
  • C#源码线程多串口

    千次阅读 2010-08-03 17:12:00
    多个串口,最好用多线程,这样比较方便 , 也可以在一个线程中,一个一个读串口数据! 本源码是从网上收集的,用于保留自己以后使用,同时希望对需要的朋友提供一点学习的资料。 <br />using System;...
  • 给Android设备增加串口功能

    千次阅读 2012-04-23 08:58:48
    环境: 主机:WIN7 开发环境:MDK4.23 功能: 打开Android手机或者平台的蓝牙,通过蓝牙连接蓝牙转串口板,通过蓝牙转串口板的串口...2.制作了一个蓝牙转串口的板子,Android设备连接上这个板子,就相当于增加了一个串口.
  • linux查看新增串口、USB设备,Minicom + Usb转串口注意:虚拟机环境下的ubuntu默认情况下是不能自动识别的,需要在虚拟机窗口右下角点击"Prolific USB-Serial Controller",然后选择"Connect...
  • 使用路复用实现3个串口的通信

    千次阅读 2012-07-19 19:52:07
    如题,Linux环境下操作串口设备,实现路复用。 串口配置函数: /* * set_com_config.c * * Created on: 2012-7-18 * Author: liwei.cai */ #include int set_com_config(int fd, int baud_rate, int ...
  • rs232串口共享

    2007-09-21 09:07:13
    多个进程共享一个RS232串口, 为公司的读卡器应用开发的. 比如设备连接在com1, 进程1 初始化com1后, 进程2 也可以访问com1上的设备. 以一个类来实现了这个共享功能,使用方便快捷。公司的项目在使用这个类,经...
  • 通过计算传感器获取到的源数据后输出给下层执行,而这个传输过程常常使用串口通信,所以在封装一个方便好用的串口收发库可以有限解决这一需求,本文章将针对C++实现串口收发和简单校验以及指定Ubuntu系统USB设备进行...
  • 安卓系统是架构在Linux上的,如果要将一个串口设备让应用层APP识别,或者说将数据读取出来应该有一下的几个必要的事要做 1、APP是用java写的,因此要实现Java调用C/Cpp代码, 2、应该有C/Cpp编写的Linux应用 3、...
  • android设备使用usb串口传输数据

    千次阅读 2018-06-07 11:19:53
    https://code.google.com/archive/p/android-serialport-api/另一个是我们这次介绍的开源项目:https://github.com/mik3y/usb-serial-for-android   第一步:获取所有的已插入的串口驱动1 UsbManager manager = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,395
精华内容 9,758
关键字:

一个串口读多个设备