qt 子线程串口发送数据异常

class UartQThread : public QThread
{
Q_OBJECT
public:
UartQThread();
void run();
private:
QSerialPort *Uart;
QString UartPort;
uint32_t BaudRate;
uint32_t DataBits;
QString StopBits;
QString Parity;
bool UartReady;
char readbuff[128];
public:
void UartInit();
private slots:
void UartRead(void);
};

UartQThread::UartQThread()
{
UartInit();
}
void UartQThread::run()
{
int result;

while(true)
{
    result = Uart->write("this is uart send test456");
    qDebug("UartQThread 1000ms test:%d %d", result, Uart->bytesAvailable());
    msleep(1000);
}

}
void UartQThread::UartInit()
{
Uart = new QSerialPort();
UartReady = false;
connect(Uart,SIGNAL(readyRead()),this,SLOT(UartRead())); //连接槽
// ...... 省略 串口波特率等设置
if(Uart->open(QIODevice::ReadWrite))
{
qDebug("open uart port success");
}
else
{
qDebug()<<"open uart fail"<<UartPort;
}

 Uart->write("this is uart send test123");

}

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
UartQThread *UartProcessD = new UartQThread();
UartProcessD->start();
}
使用QSerialport,UartQThread 继承QThread ,对端串口收到了 UartInit发送数据;但是run 函数中,循环write 发送数据,对端串口只收到一次, 如果将UartInit放到run 里面初始化,一条也发送不出去,也收不到

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
QT串口发送数据失败
如下是工程代码,但是在发送数据时,始终发送失败。rnrnrn#include "widget.h"rn#include "ui_widget.h"rnrnWidget::Widget(QWidget *parent) :rn QWidget(parent),rn ui(new Ui::Widget)rnrn ui->setupUi(this);rn readTimer=new QTimer(this);rn readTimer->start(100);rn connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom()));rn myCom=new Win_QextSerialPort("COM16",QextSerialBase::Polling);rn myCom->open(QIODevice::ReadWrite);rn myCom->setBaudRate(BAUD115200);rn myCom->setDataBits(DATA_8);rn myCom->setParity(PAR_NONE);rn myCom->setStopBits(STOP_1);rn myCom->setFlowControl(FLOW_OFF);rn myCom->setTimeout(10);rn connect(myCom,SIGNAL(readyRead()),this,SLOT(readMyCom()));rn connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()));rnrnvoid Widget::readMyCom()rnrn qDebug()<<"read: "<bytesAvailable()<<"bytes";rn QByteArray temp=myCom->readAll();rn ui->textEdit->insertPlainText(temp);rnrnvoid Widget::on_pushButton_clicked()rnrn int result=myCom->write(ui->lineEdit->text().toAscii());//这里始终发送失败。rn if(result==-1)rn rn qDebug()<<"send failed";rn rnrn
主线程向子线程发送数据
handler
子线程 发送数据 死掉
为什么我的子线程循环发送数据会死掉?rn代码如下rn private void AutoSend()rn rn while (true)rn rn Thread.Sleep(1000);rn rn if (null == pAutoBuff)rn rn return;rn rn tryrn rn if (!Send(pAutoBuff, 10000))//send是自己写的函数,pAutoBuff是数据,1000是发送时间rn rn return;rn rn rn catch (System.Exception)rn rn return;rn rnrn rn求高人指点rn
串口发送数据.......
VB串口发送一组168个字节的数据,其中前6个字节是发送16进制,后面160个字节是发送16进制的ASCII码,第167个字节是全面166个16进制数据的校检和取低位,再转换成16进制的ASCII码,就占了2个字节,全部数据就是168个字节的数据了rnrn这段代码可以实现发送数据了,但是好像稳定性不强,发送的数据可能会经常出错,是不是因为数据长度越大,出错的几率就越大?168个字节的数据发送出错几率大不大呢?rnrn有什么办法可以同样实现以上数据的发送,让发送的数据都正确,或者说可不可以优化一下这段代码呢?rnrnPrivate Sub clearDksj_Click()rnrn If MSComm1.PortOpen = False Thenrn MsgBox "请先打开串口!", vbOKOnly + vbExclamation, "提示!"rn End Ifrn If MSComm1.PortOpen = False Then Exit Subrn rn Dim send_buf() As Bytern Dim Abyte(166) As Bytern Dim ss As Singlern Dim XX As Stringrn rn Abyte(0) = &H1Frn Abyte(1) = &H6Drn Abyte(2) = &H30rn Abyte(3) = &H31rn Abyte(4) = &H2Arn Abyte(5) = &H2Brn rn For I = 6 To 165rnAbyte(I) = &H30rnNextrnrnFor I = 0 To 165rn ss1 = ss1 + Val(Abyte(I))rn Nextrn rn Abyte(166) = ss1 Mod 256rnrn XX = Right("00" & Hex(Abyte(166)), 2)rn rn send_buf = StrConv(Chr(&H1F) & Chr(&H6D) & Chr(&H30) & Chr(&H31) & Chr(&H2A) & Chr(&H2B) & Right(String(160, "0"), 160) & Right("00" & Hex(Abyte(166)), 2), vbFromUnicode)rnrnMSComm1.Output = send_bufrnrnEnd Sub
串口发送数据
假设发送部分正确rn发送BYTE数组如下:rnBYTE* SendStr=new BYTE[5];rnSendStr[0]=0X07;rnSendStr[1]=0XED;rnSendStr[2]=0X00;rnSendStr[3]=0X00;rnSendStr[4]='\0';rn....rn发送数组SendStr 是否正确?
c# 串口发送数据 c# 串口发送数据
c# 串口发送数据c# 串口发送数据c# 串口发送数据c# 串口发送数据
树莓派3B在Qt下使用串口发送数据
一、解除串口占用 使用putty的时候神奇的发现树莓派竟然是支持serial进行操作。试了试,和在ssh下使用没有多少区别,速度也很快。 树莓派的串口主要也就是被这个占用了,配置释放之后才能使用它来进行串口通信。在命令行里输入如下指令:sudo raspi-config在如下出现的界面中选择 5 选择“P6 Serial”,然后把它关闭了,即Disable。 打开/boot/config
⑤串口发送数据
说明:单片机连接电脑,在串口工具上查看单片机发来的数据。接收数据下一章再教。 原料:最小开发板(晶振为115200),51单片机,usb转ttl 一、为什么要用最小开发版进行实验? 可能刚开始学单片机的你们,都是人手一个单片机学习板,烧录程序到单片机也是用单片机学习板。单片机最小开发板和单片机学习板的晶振不同(学习板的一般为120000),所以在TX发送数据的时候,会乱码。 记住:用学习板烧...
QT串口程序已16进制接受和发送数据
QT串口程序已16进制接受和发送数据
【发送数据】串口发送数据的问题汇总
1\发送一般是不需要放在中断中的(我写了10年程序,从没放过,^_^) 你改成这样 SBUF=sendH; while(TI==0); TI=0; SBUF=sendL; while(TI==0); TI=0; 直接观察TI来判断是否发送成功,而不是靠延时,最好是你写成专门的发送函数,这样程序更清晰 http://zhid...
Timer子线程异常
我在程序里了使用了Timer定时去检查一些业务,但是Timer启动的线程里如果出现错误,却无法捕获到,下面是我的一个demo:rn1.Program文件里:rn [code=C#]static void Main()rn rn Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);rn Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);rn AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);rn Application.EnableVisualStyles();rn Application.SetCompatibleTextRenderingDefault(false);rn Application.Run(new Form1());rn rnrn static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)rn rn Exception ex = e.Exception;rn MessageBox.Show(ex.Message);rn rnrn static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)rn rn Exception ex = e.ExceptionObject as Exception;rn MessageBox.Show(ex.Message);rnrn[/code]rn2.有个业务类Class1rn [code=C#]class Class1rn rn System.Timers.Timer myTimer = new System.Timers.Timer(3000);rn public Class1()rn rn myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);rn myTimer.Enabled = true;rn rnrn void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)rn rn tryrn rn int i = 0;rn int j = 1;rn int k = j / i;//这里模拟抛出异常rn rn catch (Exception ex)rn rn throw ex;//调试的时候,程序是会进到这里来的,但是我不想只在这里处理,还想传递给窗体线程。rn rn rn [/code]rnrn3.在窗体中调用上面的业务类rn[code=C#] private void button1_Click(object sender, EventArgs e)rn rn //myTimer.Enabled = true;rn tryrn rn Class1 cls = new Class1();rn rn catch (Exception ex)rn rn throw ex;//这里捕获不到cls里的Timer抛出来的异常的。rn rn [/code]rnrn在窗体中无法捕获到Timer抛出来的异常,而且在Application.ThreadException这里也一样没有捕获到,根本没像程序写的会有个messagebox弹出来。。。。rnrn郁闷了,在网上看到好多人都说要Application.ThreadException或者AppDomain.CurrentDomain来捕获。可是我怎么试都不行。大家有什么办法呢?
子线程异常退出 EExitPanic
主线程中创建一子线程,执行操作,在模拟器上可以成功运行,但是真机上却是子线程异常退出,返回 EExitPanic,抓错误是 KERN-EXEC 3,不知道大家有没有遇到类似的情况,是如何解决的
QT子线程 show UI
QT程序的主线程中用pthread_create创建一子线程;rnrn子线程中要show一张图片。由于子线程不允许UI显示。rn怎么写connect(?, func, this func);rnrnQAaa::QAaa(QObject *parent) :rn QTcpServer(parent)rnrn .....rn pthread_create(&this->play, &attr, aThread, this);rnrn connect(? , SIGNAL(show(const QString &)), this, SLOT(show(const QString &)));rn
QT子线程画图
1.业务类 MyWork.h #ifndef MYWORK_H #define MYWORK_H #include #include class MyWork : public QObject { Q_OBJECT public: explicit MyWork(QObject *parent = 0); // 添加画图函数 void drawIma
Qt 子线程间通信
class gui:public dialog // 主线程rnprivate:rn A *a;rn B *b;rn;rnrnconnect(a, SIGNAL(sendData(QByteArray)), b, SLOT(getData(QByteArray)));rnconnect(b, SIGNAL(sendData(QByteArray)), a, SLOT(getData(QByteArray)));rnrnclass A:public QThread // 串口读写数据rnprotected: rn virtual void run();rnprivate slots:rn void getData(QByteArray &); // 应该是在主线程里运行的rn rnsiganls:rn sendData(QByteArray &);rnrnrnclass B:public QThread // 串口数据处理线程rnprotected: rn virtual void run();rnprivate slots:rn void getData(QByteArray &); // 应该是在主线程里运行的rn rnsiganls:rn sendData(QByteArray &);rnrnrn这样做岂不是gui主线程在中间做桥梁?怎么样才能不用主线程做桥梁呢?有遇到同样问题的朋友吗,你们是怎么处理的rnrn
自动发送数据串口工具
可以再配置文件的情况下,自动向指定的串口发送数据!
cgi 控制串口发送数据
请问各位使用cgi能控制多线程的串口吗?为什么我从网页上输入一个参数cgi程序就出错,无法打开驱动设备.求指教
c#串口发送数据
协议采用9个字节每帧 ,其中:rnrn设定运行距离rn0xff 0xaa 0x0N(电机1对应0x01,电机2对应0x02) rn0x03(CMD,对应命令号)rn0xnn 0xnn 0xnn(这3个字节表示运行距离,前面是低字节,后面是高字节)rn0x00 0xnn(最后一个字节对应前面所有的字节的和,校验用)rnrn请问在c#中我想要向串口com3 发送命令让 1号点机 移动5mm该怎么写? rn我不明白的是 字节 和进制这些东西 觉得和复杂。rn
给串口发送数据问题
我收集了一些GPS数据在t.txt文档中,现在要将这里面的数据通过虚拟串口发给一个PC版的导航软件。rn但我这发送有点问题,点一下就发送一部分数据,再点一下又发送一部分rn请问下如何才能让程序自动一步一步发啊~~?请赐教rnrn代码如下:rnrnusing System;rnusing System.Collections.Generic;rnusing System.ComponentModel;rnusing System.Data;rnusing System.Drawing;rnusing System.Text;rnusing System.Windows.Forms;rnusing System.IO.Ports;rnusing System.Threading;rnusing System.IO;rnrnnamespace WindowsApplication1rnrn public partial class Form1 : Formrn rn SerialPort _serialPort;rn string filename = @"E:\t.txt";rn StreamWriter sw = null;rn bool _continue = true;rnrnrn public Form1()rn rn InitializeComponent();rn rnrn private void InitPort()rn rn StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;rnrn // Create a new SerialPort object with default settings.rnrn _serialPort = new SerialPort();rnrn // Allow the user to set the appropriate properties.rnrn _serialPort.PortName = "COM5";//SetPortName(_serialPort.PortName);rn _serialPort.BaudRate = 4800;// SetPortBaudRate(_serialPort.BaudRate);rn _serialPort.Parity = Parity.None;// SetPortParity(_serialPort.Parity);rn _serialPort.DataBits = 8;//SetPortDataBits(_serialPort.DataBits);rn _serialPort.StopBits = StopBits.One;// SetPortStopBits(_serialPort.StopBits);rn _serialPort.Handshake = Handshake.RequestToSend;// SetPortHandshake(_serialPort.Handshake);rn _serialPort.RtsEnable = true;rn // Set the read/write timeoutsrnrn _serialPort.ReadTimeout = 500;rn _serialPort.WriteTimeout = 500;rnrn _serialPort.Open();rn rnrn public void Read()rn rn while (_continue)rn rn tryrn rn //string message = _serialPort.ReadLine();rn string message = _serialPort.ReadLine();rn sw.Write(message);rn //Console.WriteLine(message);rn rn catch (TimeoutException) rn rn sw.Close();rn rnrn private void Form1_Load(object sender, EventArgs e)rn rn InitPort();rn rnrn private void btnRead_Click(object sender, EventArgs e)rn rn _continue = true;rn sw = new StreamWriter(filename, true);rnrn Thread readThread = new Thread(Read);rn readThread.Start();rn rnrn private void btnStop_Click(object sender, EventArgs e)rn rn _continue = false;rn rnrn private void btnWrite_Click(object sender, EventArgs e)rn rn StreamReader sr = new StreamReader(filename);rnrn while (sr.Peek() != -1)rn rn string message = sr.ReadLine();rn //tryrn //rn _serialPort.WriteLine(message);rn //rn //catch (TimeoutException) rn rnrn sr.Close();rn rnrn rn
串口发送数据有误
在写个画图软件,现在想通过串口将所作的图的数据发给下位机,目前我采用串口精灵进行数据调试,但我上位机发送数据时就出错了,是什么原因呢?我将我的代码贴在下面,高手给看下吧。 rnrn我的MSComm控件放在程序主对话框上,所以在view创建时创建的控件,下面是控件的初始化: rnint CDEMOView::OnCreate(LPCREATESTRUCT lpCreateStruct) rn rnif (CView::OnCreate(lpCreateStruct) == -1) rnreturn -1; rnrn// TODO: Add your specialized creation code here rn m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM);//创建控件 rnm_MSComm.SetCommPort(m_strComm);//选择COM rn//m_MSComm.SetCommPort(1); rnm_MSComm.SetInBufferSize(1024);//接收缓冲区大小 rnm_MSComm.SetOutBufferSize(1024);//发送缓冲区大小 rnm_MSComm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取 rnm_MSComm.SetInputMode(0);//以文本格式(ASCII)取回数据 rnm_MSComm.SetRThreshold(1);//表示一有数据就开始接收数据的OnComm件事 rnrnm_MSComm.SetSettings(m_strBaudRate + "," + CString(m_strParity) + "," + rn m_strDataBits + "," + m_strStopBits);//设置波特率,校验位,数据位,停止位 rn // m_MSComm.SetSettings("9600,N,8,1"); rnrnif(!m_MSComm.GetPortOpen())//如果串口没有打开则打开 rn m_MSComm.SetPortOpen(TRUE);//打开串口 rnelse rnAfxMessageBox("串口未打开!");//打开失败弹出提示对话框 rnm_MSComm.GetInput();//先预读缓冲区以清除残留数据 rnrnrnreturn 0; rn rnrn我现在只要求发送数据,没涉及接收数据,那OnOnCommMscomm()是不是如下面写: rnvoid CDEMOView::OnOnCommMscomm() rn rn// TODO: Add your control notification handler code here rnVARIANT variant_inp; rnCOleSafeArray safearray_inp; rnLONG len,k; rnBYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed. rnCString strtemp; rnif(m_MSComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 rn rnvariant_inp = m_MSComm.GetInput(); //读缓冲区 rnsafearray_inp = variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 rnlen=safearray_inp.GetOneDimSize(); //得到有效数据长度 rnfor(k=0;k
Java 串口发送数据监听
通常使用Java操作串口打印,监听动作最多的是接收数据,如下代码;rn但若向串口发送数据,那么监听应该如何写呢?rn如何知道任务确实已经打印?如何知道打印机缺纸?rn public class CommPortListener implements SerialPortEventListener rn public void serialEvent(SerialPortEvent e) rn System.out.println("监听..." + e.getEventType());rn switch (e.getEventType()) rn case SerialPortEvent.CTS:rn System.out.println("CTS event occured.");rn break;rn case SerialPortEvent.CD:rn System.out.println("CD event occured.");rn break;rn case SerialPortEvent.BI:rn System.out.println("BI event occured.");rn break;rn case SerialPortEvent.DSR:rn System.out.println("DSR event occured.");rn break;rn case SerialPortEvent.FE:rn System.out.println("FE event occured.");rn break;rn case SerialPortEvent.OE:rn System.out.println("OE event occured.");rn break;rn case SerialPortEvent.PE:rn System.out.println("PE event occured.");rn break;rnrn case SerialPortEvent.RI:rn System.out.println("RI event occured.");rn break;rn case SerialPortEvent.OUTPUT_BUFFER_EMPTY:rn System.out.println("OUTPUT_BUFFER_EMPTY event occured.");rn break;rnrn case SerialPortEvent.DATA_AVAILABLE:rn System.out.println("DATA_AVAILABLE event occured.");rn break;rn rn rn
串口循环接收和发送数据
labviEW的一个串口循环接收和发送数据的程序
C#串口发送数据问题。
打开一个bin文件,读取里面的内容,然后将内容按照每组256个字节进行分组, nbyte[] buf = new byte[];发送第一组256个字节内容,前面加上FF B5 最终变成nFF B5 +256 总共258个内容进行发送,然后等待收到回复确认(可以用timer控件),n开始发送第二组数据FF B6 +256字节 总共258个发送出去。然后等待收到回复确认,开始发送第三组内容 FF B5 +256,收到回复,再发送FF B6 +256字节,收到回复,以此下去,直到发完所有字节。
串口发送数据的问题
小弟最近在学习串口编程,使用龚建伟老师的书,进行联系,发送数据给485模块来控制智能插座,我写的源码如下:rnif(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符rn rn rn variant_inp=m_ctrlComm.GetInput(); //读缓冲区rn safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量rn len=safearray_inp.GetOneDimSize(); //得到有效数据长度rn for(k=0;k
串口发送数据问题
指令如下(Text方式,只能发送英文字符):rnAT+CMGF=1rn等待接收OKrnAT+CMGS=”目标手机号码”rn短信文本rn等待接收OKrnrn具体如何发送数据我会,但是我不太明白该发送什么,好象是用十六进制发送的吧?rn那么CF怎么发?rnCtrl+Z怎么发?rnAT+CMGF=1是不是发送AT然后跟上CMGF=1的十六进制,该怎么转换?rn
串口控件发送数据
//m_SendComm 是 char m_SendComm[7];已经有了数据了,然后发送就出错误rn CByteArray array;rn rn array.RemoveAll();rn rn array.SetSize(7);rn rn for(int i=0;i<7;i++)rn array.SetAt(i, m_SendComm[i]);rn rn m_ComPort.SetOutput(COleVariant(array)); // 发送数据rn就报错误啊rn出来一个对话狂,主要是Debug Assertion Failedrnfile:winocc.cpprnline 345
stm32串口发送数据出现问题
在用stm32向上位机发送串口数据的时候,发现发送的个数和上位机接收到的数据个数不匹配,后来发现是延时的问题,在发送的时候加个延时就可以了!
串口发送数据不成功.
你好, 我最近又碰到一难题。rnLRESULT CEewriterDlg::OnSerialMsg (WPARAM wParam, LPARAM /*lParam*/)rnrn CSerial::EEvent eEvent = CSerial::EEvent(LOWORD(wParam));rn CSerial::EError eError = CSerial::EError(HIWORD(wParam));rnrn if (eEvent & CSerial::EEventRecv)rn rn rnrn接下来我用一线程做数据处理和发送..rnvoid CEewriterDlg::WriteEprom()rnrn char ch2 = '9';rn CString strData[16],strTemp, strTemp1;rn CString strEpromData;rn int iCount = m_cListEprom.GetItemCount();rn DWORD dwSend = 0;rn if (iCount) rn for (int i = 0; i < 1; i++) rn for (int m = 1; m < 17 ; m++) rn strEpromData = m_cListEprom.GetItemText(i, m);rn strTemp.Format("%X", i);rn strTemp1.Format("%X", m-1);rn strTemp = strTemp + strTemp1;rn strEpromData = strEpromData + "\n";rn strTemp = strTemp + "\n";rn m_serial.Write(&ch2, 1); rn Sleep(2);rn m_serial.Write(strTemp, strTemp.GetLength());rn Sleep(2);rn m_serial.Write(strEpromData, strEpromData.GetLength());rn Sleep(2);rn strTemp.Empty();rn strEpromData.Empty();rn strTemp1.Empty();rn rn rn rn AfxMessageBox("已经成功写入1!");rnrn发送的数据老是一部分正确,一部分错误,,似呼一些没有发过去..但又不知道为什么./? 希望你能指点一二..谢谢..
casio dt930 串口发送数据
最近在做 casio dt930的盘点机项目,有一个问题是需要和pc端的一个系统进行数据对接,是直接将保存的数据通过串口通信发送出来,这该如何操作?需要用到哪些函数,有没有示例呢?谢谢了。
Linux下使用串口发送数据
在Linux系统下实现读取文件内容,并使用串口发送。串口为RS232.
c# 串口读取发送数据
c# 串口读取发送数据,串口调试,测试串口数据的接收和发送
串口发送数据延时问题
我现在有8192字节的数据要发送的串口,每次发送四个字节。串口的波特率是115200rnrn放在一个for循环里那么它会不断的把数发送出去,现在因为发数太快,下边的机器可能会来不及接受数据导致有些数据没法写入进去,我要求是发每个数之间要有个的延时,但是我用Sleep(100)发现程序就跟死了一样。大家有什么好的方法或者建议rn另外延时应该设置多少才合适?rn以下是部分程序rnrn[code=C/C++]rn aniSent =(AnsiString)"tpvset_Address"+" "+(AnsiString)Address+" "+"0x"rn +EEPromVal1+EEPromVal2+EEPromVal3+EEPromVal4+"\r\n";rn MSComm1->Output = StringToOleStr(aniSent);rn Sleep(100);rn[/code]
串口发送数据不对的问题
wince串口程序,用wince开发板和计算机互连,用串口助手调试,在计算机端用串口接收数据不正确,但是计算机发,程序收显示正常。但是单步跟踪调试数据显示都正确啊,苦找不到原因,难道是宽字符需要转换么?怎么转求解答rn代码如:rnvoid CSerialPortDlg::OnSend() rnrn DWORD dwCharToWrite=0;rn DWORD dwBytesWritten=0;rn int i,j;rnrn GetDlgItemText(IDC_TRANSMIT,m_strTransmit);//cstring m_strTransmitrn if(!HexSend)//十六进制rn rn dwCharToWrite=(DWORD)m_strTransmit.GetLength();rn rn elsern rn for(i=0;i='0'&&m_strTransmit.GetAt(i*2)<='9')||(m_strTransmit.GetAt(i*2)>='A'&&m_strTransmit.GetAt(i*2)<='F'))&&((m_strTransmit.GetAt(i*2+1)>='0'&&m_strTransmit.GetAt(i*2+1)<='9')||(m_strTransmit.GetAt(i*2+1)>='A'&&m_strTransmit.GetAt(i*2+1)<='F')))rn rn dwCharToWrite++;rn rn rn rn dwBytesWritten=0;rn rn if(Open&&dwCharToWrite!=0)rn rn char* buf=new char[dwCharToWrite];rn rn if(!HexSend)rn rn rn for(i=0;i<(int)dwCharToWrite;i++)rn rn buf[i]=(char)m_strTransmit.GetAt(i);rn rn rn rn elsern rn j=0;rn for(i=0;i='0'&&m_strTransmit.GetAt(i*2)<='9')||(m_strTransmit.GetAt(i*2)>='A'&&m_strTransmit.GetAt(i*2)<='F'))&&((m_strTransmit.GetAt(i*2+1)>='0'&&m_strTransmit.GetAt(i*2+1)<='9')||(m_strTransmit.GetAt(i*2+1)>='A'&&m_strTransmit.GetAt(i*2+1)<='F')))rn rn if(m_strTransmit.GetAt(i*2+1)>='0'&&m_strTransmit.GetAt(i*2+1)<='9')rn rn buf[j]=m_strTransmit.GetAt(i*2+1)-48;rn rn elsern rn buf[j]=m_strTransmit.GetAt(i*2+1)-55;rn rn if(m_strTransmit.GetAt(i*2)>='0'&&m_strTransmit.GetAt(i*2)<='9')rn rn buf[j]+=(m_strTransmit.GetAt(i*2)-48)*16;rn rn elsern rn buf[j]+=(m_strTransmit.GetAt(i*2)-55)*16;rn rn j++;rn rn rn rn dwBytesWritten=m_pSerial->WritePort(buf,dwCharToWrite);rn if(dwBytesWritten==0)rn rn AfxMessageBox(_T("无法向端口写入数据!"));rn rn delete[] buf; rn rnrnDWORD CPSerialPort::WritePort(char *data,int length)rnrn if(m_hComm==INVALID_HANDLE_VALUE)rn rn return 0;rn rnrn BOOL fWriteState;rn DWORD dwBytesWritten=0;rnrn fWriteState=WriteFile(m_hComm,data,length*sizeof(char),&dwBytesWritten,NULL);rnrnrn return dwBytesWritten;rnrn
winsock 发送数据产生异常
建立连接后,第一次可以正常发送数据,但第二次发送数据时会产生0X800A9C46异常,不能发送数据,请问高手是什么原因。多谢
通过串口发送数据
通过串口把计算机相连,发送数据, 包含SLN解决方案
STM32USART串口单片机发送数据
非常详细的介绍了如何使用STM32的串口USART发送数据,还附带非常完整的程序。
linux串口发送数据
linux串口写数据,linux串口写数据,linux串口写数据,
串口发送数据网口接收数据
串口自动发送方数据,网口接收数据,可运行,只要修改下网口参数-Automatic sending serial data, Ethernet port to receive data, can run as long as the modified parameters of the net mouth
单片机采集串口发送数据
本程序以单片机89C52为核心,以ADO0832采集电压值,通过LCD显示采集数据,然后通过单片机的串口发送到PC程序,经过验证,该程序能正确显示.
串口发送数据到1602显示
#include<reg52.h> #include "delay.h" #include "1602.h"unsigned char str[10]; unsigned char Temp; //定义临时变量 unsigned char i = 0; void uart_init() { SCON = 0x50;//设置串口方式1,打开允许接受 //SMO =
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池