精华内容
下载资源
问答
  • c++串口程序

    2018-11-29 14:07:40
    c++ win32 串口程序
  • STM32f103多串口程序32单片机程序 亲测能用
  • 用Qt Vs写的串口程序

    2018-08-03 08:44:31
    能够实现串口通信,实现hex的收发。用到了qtserialport。重设积分
  • STM8S003模拟串口程序

    2017-11-15 16:50:55
    在STM8S003最小系统上用PC3、PC4引脚模拟串口的发送和接收,通过查询方式进行串口通信
  • STM8S USART 串口程序

    2017-03-07 15:26:28
    STM8S USART 串口程序
  • 基于ZYNQ7020的UART串口程序,管脚使用MIO14,MIO15,软件版本VIVADO2018.2,包含FPGA 和 PS部分的串口程序,发送数据到上位机
  • 程序是在stm32f103c8t6开发板上进行开发,其中使用的软件是MDK5,程序经过测试,运行成功
  • ZYNQ7010的UART串口程序

    2018-02-27 11:13:59
    ZYNQ7010的UART串口程序,版本VIVADO2017.1,包括PS部分的串口程序
  • 一个一看就懂得51单片机RS232串口程序
  • QT串口程序

    2017-11-12 16:13:06
    基于QT5写的简要串口程序。基本上实现了串口搜索,串口波特率配置,以及串口的收发等操作。
  • 51单片机串口程序,字符串16进制发送与接收.docx
  • STM32F103 串口程序(完整版)

    热门讨论 2012-08-19 12:56:30
    STM32F103VE 的串口使用程序,完全使用寄存器操作,没有使用库,我以前发了这个程序,但是在整理的时候没有把定义等的代码全部包含进去,我在这里先说声对不起,这次我把完整的定义,头文件和源代码都包含了进来,...
  • QT5.2编写PC机串口程序

    热门讨论 2014-05-15 15:58:41
    用QT开发的上位机串口收发界面,程序已经过调试,能够运行!
  • C#开发的串口程序(源代码)

    热门讨论 2011-03-06 14:44:23
    串口程序功能说明: 1.可根据计算机配置选择串口号 2.要通过串口发送的指令可以进行编辑保存,调用时只需按“发送”按钮,操作方便 3.通过串口发送的指令可以按单个字符方式发送,适于不同场合需要 4.串口数据可以...
  • linux下的串口测试程序,可以实现收发功能,检测串口是否正常
  • stm32F103串口程序的配置及简单的使用(串口1,串口2,串口3)USART1,USART2,USART3 通过按键发送一串十六进制指令 串口二收到数据并将收到数据存入数组中 串口二收到的数据以0x3A开头,0x23结束。 串口1用作串口...
  • LABVIEW中串口程序大全

    2011-03-28 16:17:58
    LABVIEW 编写的 关于串口通讯相关的程序 ,希望对需要的人有用
  • 程序中实现了c++串口异步通信,并对主要的函数功能及形参含义做了详细的注释,代码实测正确! 关于程序的解释可参见本人撰写博客: https://blog.csdn.net/sinat_35728816/article/details/81632310
  • 简单的串口程序

    千次阅读 2019-03-27 21:35:54
    串口: 关于对串口的问题: 串口寄存器有什么功能? TI,RI是什么? SBUF又是啥? 为什么使用定时器1作为串口? 什么是波特率? 波特率怎么算? 请带着这些问题移步:蓝桥杯之单片机设计与开发(13)——UART串口通信...

    串口:

    关于对串口的问题:
    串口寄存器有什么功能?
    TI,RI是什么?
    SBUF又是啥?
    为什么使用定时器1作为串口?
    什么是波特率?
    波特率怎么算?

    请带着这些问题移步:蓝桥杯之单片机设计与开发(13)——UART串口通信 作者:小默haa

    功能:

    1. 打开串口助手,发送数据成功后 L2 亮
    2. 接收数据+1,L1瞬间闪一次(L2同时灭一次)
      在这里插入图片描述
      波特率可以通过STC-ISP软件设置:
      在这里插入图片描述
      注意:定时器设置为12T模式,定时器1(8位自动重载)

    代码:

    ******************************************************************************
    * 文件名:串口
    * 描  述:
    * 作  者:思索与猫
    * 日  期:  19/3/27
    * 备  注: 
    *         
    ******************************************************************************
    #include<stc15f2k60s2.h>
    
    typedef unsigned char uchar;
    typedef unsigned int uint;
    
    void CloseFucker();
    void UartInit();		//9600bps@12.000MHz
    void ShowLED(uchar temp);
    
    void main()
    {
    		CloseFucker();
    		UartInit();
    		EA = 1;
    		while(1)
    		{
    				;
    		}
    }
    
    void Uart_Interrupt() interrupt 4
    {
    		if(RI == 1)        //接收数据
    		{
    				RI = 0;
    				SBUF = SBUF+1;   
    				ShowLED(0x01);
    		}
    		if(TI == 1)    	  //发送数据
    		{
    				TI = 0;
    				ShowLED(0x02);
    		}
    }
    
    void UartInit()		//9600bps@12.000MHz
    {
    		PCON &= 0x7F;		
    		SCON = 0x50;		
    		AUXR &= 0xBF;		
    		AUXR &= 0xFE;		
    		TMOD &= 0x0F;	
    		TMOD |= 0x20;		
    		TL1 = 0xFD;		
    		TH1 = 0xFD;		
    		ET1 = 0;		
    		TR1 = 1;	
    		ES = 1;        //打开串口中断
    }
    
    void ShowLED(uchar temp)
    {
    		P2 = P2&0x1f|0x80;
    		P0 = ~temp;
    		P2 = P2&0x1f;		
    }
    
    void CloseFucker()
    {
    		P2 = P2&0x1f|0xa0;
    		P0 = 0xaf;
    		P2 = P2&0x1f;
    }
    
    展开全文
  • QT串口通信程序

    2018-09-25 17:54:33
    QT环境下写的,串口通信程序,实测通过。支持十六机制收发
  • VS2010串口程序

    热门讨论 2014-07-04 10:59:37
    VS2010串口例程,VC2010写的串口调试助手,开发环境为VS2010,使用的unicode环境,纯API,不错的C++串行通讯例子程序
  • QT 实现串口程序

    千次阅读 2019-09-24 23:48:32
    早在 QT4 时代,那时候 QT 并没有实现串口相关的类,记得那时候写的一个上位机是使用了老外实现的一个串口类(具体的类名字忘记了,反正很长)并调用了它的接口,到了 QT5 时代,QT 库已经自带了串口相关的类,这里...

    目录

    1、头文件

    2、工程文件

    3、实现

    3.1、扫描串口

    3.2、配置串口

    3.3、打开串口

    3.4、读取数据

    3.5、发送数据


     

    早在 QT4 时代,那时候 QT 并没有实现串口相关的类,记得那时候写的一个上位机是使用了老外实现的一个串口类(具体的类名字忘记了,反正很长)并调用了它的接口,到了 QT5 时代,QT 库已经自带了串口相关的类,这里主要聊下这么使用这个玩意,并自己简单的实现了一个串口 Demo;

    先上图为证:

    对应的代码已经上传到:《用 QT 实现的串口收发程序

    实现的部分包括:

    1、扫描当前可用的串口

    2、配置串口参数

    3、开启串口并显示状态

    4、进行接收(支持 Hex 和 Char 显示)和清屏

    5、发送数据(支持 Hex 和 Char 发送)

    6、显示/清除当前接收和发送的数据总数

    那么下面就来简述一下整个过程

     

    1、头文件

    在 QT5 版本中,和串口相关的头文件主要需要包含:

    #include <QtSerialPort/QSerialPortInfo>
    #include <QtSerialPort/QSerialPort>

     

    2、工程文件

    打开你的 QT 工程文件(xxx.pro),在其中添加如下:

    QT       += serialport

     

    3、实现

    在做完1、2步骤后,就可以使用串口类了,最主要使用到的类是 QSerialPort 还有一个辅助的类 QSerialPortInfo

     

    3.1、扫描串口

    一般的,在使用串口之前呢,都需要先去轮询当前有哪些串口可用,这里用到 QSerialPortInfo 类:

    void HiSerialPortMainWindow::ScanPort()
    {
        qDebug()<<tr("扫描存在的串口");
    
        ui->progressBar->setValue(20);
    
        ui->progressBar->reset();
        ui->portComboBox->clear();
    
        foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
            qDebug() << "Name        : " << info.portName();
            qDebug() << "Description : " << info.description();
            qDebug() << "Manufacturer: " << info.manufacturer();
            qDebug() << "isBusy(): " << info.isBusy();
    
            ui->portComboBox->addItem(info.portName());
        }
    
        ui->progressBar->setValue(100);
    }

    这个ScanPort 是一个 SLOT,对应的就是按下 【Scan Ports】这个 QPushButton 的时候的响应函数;函数中轮询了当前系统中的所有串口,并将其名字添加到了串口的 QComboBox 中;我们需要通过下拉菜单选择期望打开的那个串口;

     

    3.2、配置串口

    在使用串口之前呢,不仅仅需要指定哪一个串口,还需要对它进行配置,包含波特率、停止位、数据位、校验位等等;这里我们主要使用到了 QSerialPort 类,首先需要定义它:

    HiSerialPort = new QSerialPort();

    配置的时候呢,需要调用它的一些列接口:

    HiSerialPort->setPortName(ui->portComboBox->currentText());
    HiSerialPort->setBaudRate(getBaud());
    HiSerialPort->setParity(getParity());
    HiSerialPort->setDataBits(getDataBits());
    HiSerialPort->setStopBits(getStopBits());
    // TODO: FlowControl
    HiSerialPort->setFlowControl(QSerialPort::NoFlowControl);
    HiSerialPort->setReadBufferSize(1024);
    

    这里,由于下拉菜单获取到的都是 QString,在调用串口配置的代码里需要进行一些转换,这里直接贴代码,不多说:

    enum QSerialPort::BaudRate HiSerialPortMainWindow::getBaud()
    {
        bool ok;
        enum QSerialPort::BaudRate ret;
        switch (ui->baudComboBox->currentText().toLong(&ok, 10))
        {
            case 1200:
                ret = QSerialPort::Baud1200;
            break;
            case 2400:
                ret = QSerialPort::Baud2400;
                break;
            case 4800:
                ret = QSerialPort::Baud4800;
                break;
            case 9600:
                ret = QSerialPort::Baud9600;
                break;
            case 19200:
                ret = QSerialPort::Baud19200;
                break;
            case 38400:
                ret = QSerialPort::Baud38400;
                break;
            case 57600:
                ret = QSerialPort::Baud57600;
                break;
            case 115200:
                ret = QSerialPort::Baud115200;
                break;
            default:
                ret = QSerialPort::UnknownBaud;
                break;
        }
        return ret;
    }
    
    enum QSerialPort::Parity HiSerialPortMainWindow::getParity()
    {
        QString CurrentParityBit = ui->ParityBitComboBox->currentText();
    
        if (CurrentParityBit == "None")      return QSerialPort::NoParity;
        else if (CurrentParityBit == "Odd")  return QSerialPort::OddParity;
        else if (CurrentParityBit == "Even") return QSerialPort::EvenParity;
        return QSerialPort::UnknownParity;
    }
    
    enum QSerialPort::DataBits HiSerialPortMainWindow::getDataBits()
    {
        QString CurrentDataBits = ui->dataBitComboBox->currentText();
    
        if (CurrentDataBits == "5")      return QSerialPort::Data5;
        else if (CurrentDataBits == "6") return QSerialPort::Data6;
        else if (CurrentDataBits == "7") return QSerialPort::Data7;
        else if (CurrentDataBits == "8") return QSerialPort::Data8;
        return QSerialPort::UnknownDataBits;
    }
    
    enum QSerialPort::StopBits HiSerialPortMainWindow::getStopBits()
    {
        QString CurrentStopBits = ui->stopBitComboBox->currentText();
    
        if (CurrentStopBits == "1")        return QSerialPort::OneStop;
        else if (CurrentStopBits == "1.5") return QSerialPort::OneAndHalfStop;
        else if (CurrentStopBits == "2")   return QSerialPort::TwoStop;
        return QSerialPort::UnknownStopBits;
    }
    

     

    3.3、打开串口

    配置完毕后,当然是打开串口,开启的方式以读写的方式打开:

    HiSerialPort->open(QSerialPort::ReadWrite)

    这个 open 有一个 bool 类型的返回值,ture 为打开成功,false 为打开失败;

     

    3.4、读取数据

    QSerialPort 类实现了一个 SIGNAL,为 readyRead(),即,当有数据的时候,会产生这个 SIGNAL,所以我们自己定义好 SLOT ,并在自己定义的这个 SLOT 函数(ReadSerialData())中去拿去串口数据:

    void HiSerialPortMainWindow::ReadSerialData()
    {
        QByteArray buffer = HiSerialPort->readAll();
        QString Str;
    
        if (!buffer.isEmpty())
        {
            if (RXFormatAsHex)
            {
                int data_len = buffer.length();
                // Handle the Hex Case
                for (int var = 0; var < data_len; var++)
                {
                    QString tempStr;
                    tempStr = QString::number(buffer.at(var), 16);
                    if (buffer.at(var) < 0x10)
                    {
                        tempStr = "0" + tempStr;
                    }
                    tempStr = /*"0x" + */tempStr.toUpper() + " ";
    
                    Str += tempStr;
                }
            }
            else
            {
                Str = buffer;
            }
    
            ui->textBrowser->moveCursor(QTextCursor::End);
            ui->textBrowser->insertPlainText(Str);
    
            RXCount += buffer.size();
            UpdateLCDNumber(0);
        }
    }

    拿串口数据的方式是通过调用 QSerialPort 的 readAll() 接口,返回的是 QByteArray 类型的数据,读到的数据就放在这里;

    这里需要注意两点:

    1、比如对方发送 0x11、0x22、0x33、0x44、0x55,的数据,很可能会触发很多次 ReadSerialData() 调用,并不是收完这 5 个数据,才会触发一次,但是读走的数据,下次不会重复读到,这点可以放心

    2、这里需要去判断读取的 QByteArray 的 buffer 是不是空,调试的时候遇到过,空数据,也触发了一次进入这个函数

     

    3.5、发送数据

    串口的数据发送是靠调用 QSerialPort 的 write 接口实现,传入的数据依然是 QByteArray 类型:

    void HiSerialPortMainWindow::WriteSerialData()
    {
        QByteArray data;
    
        if (!CurrentSerialPortOpened)
        {
            QMessageBox::warning(this,tr("Warning"),
                                 tr("Please Open Port First"),QMessageBox::Ok);
            return;
        }
    
        if (TXFormatAsHex)
        {
            QString Str = ui->sendContentlineEdit->text();
            QStringList DataList = Str.split(" ");
            qDebug() << "DataList " << DataList;
    
            for(int i = 0; i < DataList.length(); i++)
            {
                bool ok;
                QString tempStr = DataList.at(i);
                if (tempStr != " " && tempStr != "")
                {
                    qDebug() << "tempStr " << tempStr;
                    data.append((char)tempStr.toInt(&ok, 16));
                }
            }
             qDebug() << "Send QByteArray  "<< data;
             HiSerialPort->write(data);
    
             TXCount += data.size();
        }
        else
        {
            QByteArray ba = ui->sendContentlineEdit->text().toLatin1();
            HiSerialPort->write(ba.data());
            TXCount += ba.size();
        }
        UpdateLCDNumber(1);
    }
    

    这里我对数据进行了 Hex 或者 Char 的处理,以及 QLineEdit 的按照空格切分;

    其他的没啥了,亲测可用,经验证与下位机收发数据(Hex 和 Char)均正常。

    展开全文
  • PIC 串口程序 模拟串口
  • Python编写的简单串口读写程序,适合Python初学者参考,调试可用
  • 串口收发程序源码

    2018-06-11 08:33:36
    非常棒的串口收发源程序,类似串口调试精灵,自动化上位机开发必备,VC6源码,可以通过VC2010升级到高版本使用
  • C语言串口程序接收数据

    千次阅读 2019-12-10 09:46:54
    串口接收数据以TXT文档保存,如何让程序运行时让文本中只保存此次接收的数据 `这是我的代码 #include <Windows.h> #include <stdio.h> HANDLE hCom;//HANDLE 调度消息,将一个任务切换到某个指定的...

    以下为我的代码

    #include <Windows.h>
    #include <stdio.h>
    HANDLE hCom;//HANDLE 调度消息,将一个任务切换到某个指定的线程中去执行。
    int main(void)
    {
    	hCom = CreateFile(TEXT("COM4"),//COM4口
    		GENERIC_READ | GENERIC_WRITE, //允许读和写
    		0, //独占方式
    		NULL,
    		OPEN_EXISTING, //打开而不是创建
    		0, //同步方式
    		NULL);
    	if (hCom == (HANDLE)(-1))//是把 -1强制转换成 HANDLE类型.
    	{
    		printf("打开COM失败!\n");
    		return FALSE;
    	}
    	else
    	{
    		printf("COM打开成功!\n");
    	}
    
    
    	SetupComm(hCom, 1024, 1024); //输入缓冲区和输出缓冲区的大小都是1024
    	COMMTIMEOUTS TimeOuts;//调用COMMTIMEOUTS结构体, 成员的单位都以毫秒为单位。
    	//设定读超时
    	TimeOuts.ReadIntervalTimeout = 0;//接收时,两字符间最大的时延
    	TimeOuts.ReadTotalTimeoutMultiplier = 0;//读时间系数
    	TimeOuts.ReadTotalTimeoutConstant = 0;//读时间常量
    	//设定写超时  总超时   =   ReadTotalTimeoutMultiplier   *   字节数   +   ReadTotalTimeoutConstant 
    	TimeOuts.WriteTotalTimeoutMultiplier = 0;// 写每字节的超时
    	TimeOuts.WriteTotalTimeoutConstant = 0;//写串口数据的固定超时
    	SetCommTimeouts(hCom, &TimeOuts); //设置超时
    
    
    	DCB dcb;//调用BCB结构体
    	GetCommState(hCom, &dcb); //GetCommState函数可以获得COM口的设备控制块,从而获得相关参数 读取串口设置(波特率,校验,停止位,数据位等).
    	dcb.BaudRate = 115200;  //波特率为9600
    	dcb.ByteSize = 8;  //每个字节有8位
    	dcb.Parity = NOPARITY;  //无奇偶校验位
    	dcb.StopBits = ONE5STOPBITS; //两个停止位
    	SetCommState(hCom, &dcb); //SetCommState函数设置COM口的设备控制块:
    
    	DWORD wCount;//实际读取的字节数
    	BOOL bReadStat;
    	while (1)
    	{
    		PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR); //PurgeComm()函数清空缓冲区
    		/*PURGE_TXCLEAR 这个命令指导设备驱动程序清除输出缓冲区,经常与PURGE_TXABORT 命令标志一起使用
    		PURGE_RXCLEAR 这个命令用于设备驱动程序清除输入缓冲区,经常与PURGE_RXABORT 命令标志一起使用*/
    		char str[9] = { 0 };//初始化数组
    		printf("%s", str);
    		bReadStat = ReadFile(hCom, str, 9, &wCount, NULL);
    		/*ReadFile()函数 从指定的文件或者I/O设备中,读取数据。
    		如果该设备支持文件指针,读取的位置就是文件指针的位置。
    		 这个函数被设置为同步和异步两种操作都支持。 */
    		if (!bReadStat)
    		{
    			printf("读串口失败!");
    			return FALSE;
    		}
    		else
    		{
    			str[8] = '\0';
    			printf("%s\t", str);
    			FILE *fpWrite = fopen("串口1.txt", "w");
    		    if (fpWrite == NULL) {
    			printf("\nCannot open file strike any key exit!");
    			 exit(1);
    			}
    			
    			fprintf(fpWrite, "%s\t", str);
    			fclose(fpWrite);
    		}
    		
    		Sleep(100);
    	}
    }
    

    关于fopen函数的解释
    fopen() 会获取文件信息,包括文件名、文件状态、当前读写位置等,并将这些信息保存到一个 FILE 类型的结构体变量中,然后将该变量的地址返回。
    FILE 是 <stdio.h> 头文件中的一个结构体,它专门用来保存文件信息。我们不用关心 FILE 的具体结构,只需要知道它的用法就行。
    如果希望接收 fopen() 的返回值,就需要定义一个 FILE 类型的指针。例如:
    FILE *fp = fopen(“demo.txt”, “r”);
    表示以“只读”方式打开当前目录下的 demo.txt 文件,并使 fp 指向该文件,这样就可以通过 fp 来操作 demo.txt 了。fp 通常被称为文件指针。
    关于fopen函数结构中第二个参数的解释
    调用 fopen() 函数时必须指明读写权限,但是可以不指明读写方式(此时默认为"t")。
    读写权限和读写方式可以组合使用,但是必须将读写方式放在读写权限的中间或者尾部(换句话说,不能将读写方
    式放在读写权限的开头)。例如:
    将读写方式放在读写权限的末尾:“rb”、“wt”、“ab”、“r+b”、“w+t”、“a+t”
    将读写方式放在读写权限的中间:“rb+”、“wt+”、“ab+”
    整体来说,文件打开方式由 r、w、a、t、b、+ 六个字符拼成,各字符的含义是:
    r(read):读
    w(write):写
    a(append):追加
    t(text):文本文件
    b(banary):二进制文件
    +:读和写
    文件一旦使用完毕,应该用 fclose() 函数把文件关闭,以释放相关资源,避免数据丢失。fclose() 的用法为:
    int fclose(FILE *fp);
    fp 为文件指针。例如:
    fclose(fp);
    文件正常关闭时,fclose() 的返回值为 0,如果返回非零值则表示有错误发生。
    以上就是我学习总结的资料

    展开全文
  • VS串口通信程序

    2017-12-28 22:52:21
    VS串口程序,使用CSerialPort串口类,程序下载后可直接编译运行
  • PHP连接串口程序php_ser

    热门讨论 2011-09-23 11:10:54
    php实现RS232串口通信 下载php_ser_5.2.0.zip 解冻把php_ser放到ext目录下, php.ini里加上: extension=php_ser.dll PHP code string ser_version( void ) void ser_open( string port, int baudrate, int databits, ...
  • 虚拟串口程序3.66.rar

    2019-12-11 17:06:13
    虚拟串口程序3.66,用于串口编程调试,可以虚拟出多个串口,用于收发数据 虚拟串口程序3.66,用于串口编程调试,可以虚拟出多个串口,用于收发数据 虚拟串口程序3.66,用于串口编程调试,可以虚拟出多个串口,用于...
  • MATLAB串口通信程序

    2017-08-31 20:46:40
    两种方法实现matlab串口通信。一种直接编写m文件,一种是GUI。有文档,原程序,还有虚拟串口的测试工具。当你编写完程序之后,可以用虚拟串口虚拟一对串口来完成收发数据测试

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 147,928
精华内容 59,171
关键字:

串口程序