linux应用端,串口发送数据怎么知道数据发送完成 [问题点数:50分]

Bbs1
本版专家分:0
结帖率 0%
Bbs1
本版专家分:53
51单片机 串口发送数据(只是发送
51单片机 <em>串口</em><em><em>发送</em><em>数据</em></em>(只是<em>发送</em>)用于调试。 #include &lt;reg51.h&gt; #define uchar unsigned char #define uint unsigned int #define XTAL 11059200 // CUP 晶振频率 #define baudrate 9600 // 通信波特率 /************************...
linux串口发送数据
<em>linux</em><em>串口</em>写<em>数据</em>,<em>linux</em><em>串口</em>写<em>数据</em>,<em>linux</em><em>串口</em>写<em>数据</em>,
发送发送的文件,接收端怎么知道发送端的文件名?
如题,我做了一个聊天程序(类似QQ),rn客户端<em>发送</em>的文件,转换成文件流,但接收端想默认一个与源文件相同的文件名(文件名+后缀)rn<em>怎么</em>实现,有比用另一个Socket<em>发送</em>字符串更好的方式吗?
TCP数据发送
好用不贵,用于Spark Streaming处理实时<em>数据</em>,TCP<em>发送</em>端作为<em>数据</em>源生产<em>数据</em>。
挑战串口发送2--发送完成中断
__HAL_UART_ENABLE_IT(myuart-&gt;huart,UART_IT_TC); 此时开启了传输<em>完成</em>的中断,也就是你先printf一个字符串然后该中断回调 void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) { if(huart-&gt;Instance == USART1) { printf("###");...
串口怎么不能发送数据呢!!!!
我下载了一个龚建伟老师的程序,叫NNTest。按照老师的说法我把com2口和com1口连接起来。用<em>串口</em>调试助手接收<em>数据</em>。可是结果跟书上讲的不一样,调试助手接收不到<em>数据</em>。请大家帮忙。rnif(m_SerialPort.InitPort(this,2, 9600,'N',8,1,EV_RXFLAG | EV_RXCHAR,512))rn rn m_SerialPort.StartMonitoring();rn //m_bSerialPortOpened=TRUE;rn rn elsern rn AfxMessageBox("没有发现此<em>串口</em>或被占用");rn //m_bSerialPortOpened=FALSE;rn rn这是程序里添加的打开<em>串口</em>的程序。rn下面这是<em>发送</em>程序rnvoid CNNTestDlg::OnButton1() rnrn // TODO: Add your control notification handler code herern char chSend[ 5]=0x33, 0x96, 0x50, 0x31, 0xF1;rn m_SerialPort.WriteToPort(chSend);rnrn请指教!!!!!难道我操作有问题?
串口发送数据
假设<em>发送</em>部分正确rn<em>发送</em>BYTE数组如下:rnBYTE* SendStr=new BYTE[5];rnSendStr[0]=0X07;rnSendStr[1]=0XED;rnSendStr[2]=0X00;rnSendStr[3]=0X00;rnSendStr[4]='\0';rn....rn<em>发送</em>数组SendStr 是否正确?
串口发送数据.......
VB<em>串口</em><em>发送</em>一组168个字节的<em>数据</em>,其中前6个字节是<em>发送</em>16进制,后面160个字节是<em>发送</em>16进制的ASCII码,第167个字节是全面166个16进制<em>数据</em>的校检和取低位,再转换成16进制的ASCII码,就占了2个字节,全部<em>数据</em>就是168个字节的<em>数据</em>了rnrn这段代码可以实现<em><em>发送</em><em>数据</em></em>了,但是好像稳定性不强,<em>发送</em>的<em>数据</em>可能会经常出错,是不是因为<em>数据</em>长度越大,出错的几率就越大?168个字节的<em>数据</em><em>发送</em>出错几率大不大呢?rnrn有什么办法可以同样实现以上<em>数据</em>的<em>发送</em>,让<em>发送</em>的<em>数据</em>都正确,或者说可不可以优化一下这段代码呢?rnrnPrivate Sub clearDksj_Click()rnrn If MSComm1.PortOpen = False Thenrn MsgBox "请先打开<em>串口</em>!", 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
串口发送数据
说明:单片机连接电脑,在<em>串口</em>工具上查看单片机发来的<em>数据</em>。接收<em>数据</em>下一章再教。 原料:最小开发板(晶振为115200),51单片机,usb转ttl 一、为什么要用最小开发版进行实验? 可能刚开始学单片机的你们,都是人手一个单片机学习板,烧录程序到单片机也是用单片机学习板。单片机最小开发板和单片机学习板的晶振不同(学习板的一般为120000),所以在TX<em><em>发送</em><em>数据</em></em>的时候,会乱码。 记住:用学习板烧...
请教串口发送数据发送不完全的问题
小弟在使用<em>串口</em>进行通讯的时候,发现有时候会出现<em><em>发送</em><em>数据</em></em>不全的情况(比如我的命令有11个字符,它只<em>发送</em>4个),特别是主机在进行视频播放等大<em>数据</em>量处理而比较忙的时候.这让我很痛苦,因为直接会导致接收<em>数据</em>的紊乱.rn我的<em>串口</em>通讯是异步方式的,下面是往<em>串口</em>写<em>数据</em>的代码:rnrnvoid CSerialPort::WriteChar(CSerialPort* port)rnrn BOOL bWrite = TRUE;rn BOOL bResult = TRUE;rnrn DWORD BytesSent = 0;rnrn ResetEvent(port->m_hWriteEvent);rnrn // Gain ownership of the critical sectionrn EnterCriticalSection(&port->m_csCommunicationSync);rnrn if (bWrite)rn rn // Initailize variablesrn port->m_ov.Offset = 0;rn port->m_ov.OffsetHigh = 0;rnrn // Clear bufferrn PurgeComm(port->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);rnrn bResult = WriteFile(port->m_hComm, // Handle to COMM Portrn port->m_szWriteBuffer,rn // Pointer to message buffer in calling finctionrn (DWORD)port->m_nStringLength, // Length of message to send//strlen((char*)port->m_szWriteBuffer)rn &BytesSent,// Where to store the number of bytes sentrn &port->m_ov); // Overlapped structurernrn // deal with any error codesrn if (!bResult) rn rn DWORD dwError = GetLastError();rn switch (dwError)rn rn case ERROR_IO_PENDING:rn rn // continue to GetOverlappedResults()rn BytesSent = 0;rn bWrite = FALSE;rn break;rn rn default:rn rn // all other error codesrn port->ProcessErrorMessage("WriteFile()");rn rn rn rn elsern rn LeaveCriticalSection(&port->m_csCommunicationSync);rn rn // end if(bWrite)rnrn if (!bWrite)rn rn bWrite = TRUE;rnrn bResult = GetOverlappedResult( port->m_hComm, // Handle to COMM port rn &port->m_ov, // Overlapped structurern &BytesSent, // Stores number of bytes sentrn TRUE); // Wait flagrnrn LeaveCriticalSection(&port->m_csCommunicationSync);rnrn // deal with the error code rn if (!bResult) rn rn port->ProcessErrorMessage("GetOverlappedResults() in WriteFile()");rn rn // end if (!bWrite)rnrn // flush the COM Port...this sends out any info still sitting in the buffer //add 11.05rn EnterCriticalSection(&port->m_csCommunicationSync);rnrn FlushFileBuffers( port->m_hComm );rnrn LeaveCriticalSection(&port->m_csCommunicationSync);rnrn // Verify that the data size send equals what we tried to sendrn if ( BytesSent != (DWORD)port->m_nStringLength )rn rn TRACE("WARNING: WriteFile() error.. Bytes Sent: %d; Message Length: %d\n", BytesSent, strlen((char*)port->m_szWriteBuffer));rn rnrnrn每次发生接收紊乱的时候trace窗都会显示WriteFile() error,各位大侠有没有什么好的解决方案
c# 串口发送数据 c# 串口发送数据
c# <em>串口</em><em><em>发送</em><em>数据</em></em>c# <em>串口</em><em><em>发送</em><em>数据</em></em>c# <em>串口</em><em><em>发送</em><em>数据</em></em>c# <em>串口</em><em><em>发送</em><em>数据</em></em>
STM---串口发送数据,第一个数据无法发送的解决方法
STM<em>串口</em><em><em>发送</em><em>数据</em></em>无法<em>发送</em>第一个<em>数据</em>的解决方法
串口发送一大堆数据
请问如何实现<em>串口</em><em>发送</em>一大串的<em>数据</em>,就是一次没发完,第二次接着<em>发送</em>剩余的<em>数据</em>?
串口数据发送
本课程介绍S3C2440的UART通信,为后续课程打基础。
串口 发送数据库的数据
电脑通过RS232<em>串口</em>(DB9)<em><em>发送</em><em>数据</em></em>库<em>数据</em>的程序,来源于一本书,<em>数据</em>库编程
串口发送16进制数据
各位大师,我是刚学的,请教<em>串口</em><em>发送</em>16进制<em>数据</em> 0D 8A 34 7B 23 0A 如何写VBrn我写的如下:Private Sub Command1_Click()rnCommand1.BackColor = RGB(0, 255, 0) '...按下命令1钮,变绿色rnrnCommand2.BackColor = vbWhite '...命令2钮,变白色rnMSComm1.OutBufferCount = 0 '...清空输出寄存器rnMSComm1.Output = '...是不是在这写入要<em>发送</em>的<em>数据</em>rnrnrnrnrnrnEnd SubrnrnPrivate Sub Command2_Click()rnCommand2.BackColor = vbRed '...按下命令2钮,变红色rnCommand1.BackColor = vbWhite '...命令1钮,变白色rnrnEnd SubrnrnPrivate Sub MSComm1_OnComm()rnrnrnrnrn MSComm1.CommPort = 1rnrn MSComm1.Settings = "9600,n,8,1"rnrn MSComm1.RThreshold = 1rnrn MSComm1.InputMode = comInputModeBinary '设置为2进制接收,是接收&H00 - &HFF必要条件rnrn MSComm1.PortOpen = TruernrnrnrnrnrnEnd Subrn
STM32F10x的串口数据发送
//=====================================================================//TITLE:// STM32F10x的<em>串口</em><em>数据</em><em>发送</em>//AUTHOR:// norains//DATE:// Thursday 16-September-2010//Environment:// NULL//========================...
串口数据发送Socket
从<em>串口</em>接受到的字符串,并将接受到的<em>数据</em>通过socket端口发出 VC++完整代码
串口发送指定数据
我原来是<em>发送</em>文本编辑框的<em>数据</em>,按照龚建伟老师的程序编的,m_ctrlComm.SetOutput(COleVariant(m_strEditTXData));rnrn我想在想<em>发送</em>固定的<em>数据</em>,如A,我该<em>怎么</em>改写代码?rn
串口数据发送 接收
用<em>串口</em>调试助手 每隔50ms<em><em>发送</em><em>数据</em></em> <em>发送</em>200多次的时候,大概会出现7、8次没有<em>数据</em>返回 这样正常吗
linux 串口数据接收 发送实例
此例子经过验证 不是转载 Linux <em>串口</em> <em>数据</em>接收 <em>发送</em>
Linux串口驱动程序(4)-数据发送
1.tty<em>数据</em><em>发送</em>调用关系 <em>怎么</em>样才能找到<em><em>发送</em><em>数据</em></em>所使用的函数呢?打开uart_register_driver函数,找到里面的tty_register_driver,转到定义,这里调用了tty_fops这个结构,这几结构里就保存了读写<em>串口</em>的函数tty_write: static const struct file_operations tty_fops = { .llseek = no_l...
linux串口如何确认数据发送成功
<em>linux</em><em>串口</em>如何确认<em>数据</em><em>发送</em>成功,open,write,该如何判断? 求详解!
VB6怎么串口发送以下数据
01 03 20 00 00 03 0E 0B .. .....rn 01 03 20 00 00 03 0E 0B .. .....rn 01 03 20 00 00 03 0E 0B .. .....rn 01 03 20 00 00 03 0E 0B .. .....rn 01 06 20 00 00 00 82 0A .. ...‚.rn 01 06 20 00 00 20 83 D2 .. .. ƒÒrn 01 06 20 00 00 01 43 CA .. ...CÊrn 01 03 20 00 00 03 0E 0B .. .....rn 01 06 20 00 00 02 03 CB .. ....Ërnrn以上是我用serial monitor 监听得到的<em>发送</em>的<em>数据</em>。我在VB6中也要<em>发送</em>同上<em>数据</em><em>怎么</em>做?rn小弟第一次做<em>串口</em>通信,请大家指点一下,谢谢!rnrn
delphi+spcomm怎么串口数据接收和发送?
找了些资料,测试不成功.rnrn我想点一个按钮,接收过<em>串口</em>COM2发来的<em>数据</em>并显示到EDIT1里,哪位告诉我应该<em>怎么</em>做?rnSPCOM控件我安好了.
串口怎么数据打包发送
现在做一个项目,我有一个8k的码表,按照modbus的ASCII协议打包<em>发送</em>到单片机的eeprom中,协议内容如下:rnData type TRSNSFER_STEP Value type SamplernHeader -- HEX 3ArnDevice address ADDRESS_STEP ASCII 30 31rnFunction code FUNCTION_CODE_STEP ASCII 30 30rnStart address START_ADDRESS_HiByte_STEP ASCII Hi byte 30 30rn START_ADDRESS_LoByte_STEP ASCII Lo byte 30 30rnByte count BYTE_COUNT_STEP ASCII 32 30rnData DATA_STEP ASCII ......rnLRC check LRC_STEP ASCII 43 46rnCR ASCII 0Drn CR_LF_STEP rn rnLF ASCII 0Arn 如何把8k的码表分成512页每页32个字节的<em>数据</em>打包成上面协议的形式<em>发送</em>到eeprom中去?请给出详细代码,急急急谢谢大家了!新手多多关照!
发送数据串口发送数据的问题汇总
1\<em>发送</em>一般是不需要放在中断中的(我写了10年程序,从没放过,^_^) 你改成这样 SBUF=sendH; while(TI==0); TI=0; SBUF=sendL; while(TI==0); TI=0; 直接观察TI来判断是否<em>发送</em>成功,而不是靠延时,最好是你写成专门的<em>发送</em>函数,这样程序更清晰 http://zhid...
怎么发送串口命令
求高手帮忙。我做一个<em>串口</em>程序。我要向<em>串口</em>发生一个命令,但是不<em>知道</em><em>怎么</em><em>发送</em>。求指教
串口怎么发送16进制?
<em>怎么</em>将文本中的字符串,以16进制形式<em>发送</em>到<em>串口</em>上???
串口控件发送数据初始化设置(MFC-串口控件发送字符串)
<em>串口</em>控件<em><em>发送</em><em>数据</em></em>初始化设置:   1,打开<em>串口</em>按钮初始化设置 void CSerialPortDlg::OnBnClickedButtonOpen()      //<em>发送</em>按钮程序初始化 {        //TODO:  在此添加控件通知处理程序代码        if(m_mscomm.get_PortOpen())     //r如果<em>串口</em>是打开的,则关闭<em>串口</em>
怎么知道cc1100的数据已经发送成功?
我用MSP430的spi口控制cc1100。<em>数据</em>已经写到spi口的缓冲区内。请问<em>怎么</em><em>知道</em><em>数据</em>应经通过cc1100<em>发送</em>出去?rnvoid main(void)rnrn INT8U txBuffer[4]; // declear a send buffer and init rn *txBuffer=0x11;rn *(txBuffer+1)=0xaa;rn *(txBuffer+2)=0xdd;rn *(txBuffer+3)=0x33;rn rn INT8U value; // get the status of the bufferrn INT8U rxBuffer[4]=0,0,0,0; // declear a receive bufferrn INT8U length;rn WDTCTL = WDTPW + WDTHOLD; // Stop WDTrn Init_Spi(); // config spirn Power_Up_Reset_Cc1100();rn Write_Rf_Settings();rn rn Send_Packet(txBuffer,sizeof(txBuffer)); // send the packetrn 另Send_Packet代码:rnvoid Send_Packet(BYTE *txBuffer, INT8U size) rnrn Write_Spi_Reg(CCxxx0_TXFIFO, size);rn Burst_Write_SPI_Reg(CCxxx0_TXFIFO, txBuffer, size); // write the data to be sendrn Spi_Strobe(CCxxx0_STX); // enter send mode and send datarn rn while (!GDO0); // Wait for GDO0 to be set -> sync transmittedrn rn while (GDO0); // Wait for GDO0 to be cleared -> end of packetrn Spi_Strobe(CCxxx0_SFTX); // Clear the send bufferrnrnps:GDO0的状态好像不变,始终为低
数据发送端sink讲解
随着公司业务的不断增长,划分了许多<em>应用</em>,不同<em>应用</em>的日志在不同服务器上面,很难进行统一管理,通过学习该课程,你可以自己搭建日志采集系统,可以进行<em>数据</em>分析,挖掘等工作
发送串口发送3个doble类型的数据,接收端要怎么处理呢?
如题,希望高手给点思路,最好有代码~
linux 消息队列 发送端简单使用
<em>linux</em> 消息队列 <em>发送</em>端简单使用
PC端接收串口发送的32位float数据
<em>串口</em><em>发送</em>32位的float型<em>数据</em>,pc端进行四个8字节<em>数据</em>的接收及解码。代码中解码并存储了每个float行的二进制与之对应的十进制,修改路径即可。
怎么追查信使发送
最近上网总会收到一写弹出的广告信息,十分烦人,<em>怎么</em>能禁止它?<em>怎么</em>能追查源头,并攻击之?
PC端怎样通过串口发送数据给单片机,接收单片机端发送过来的数据。高分相赠,多谢
用计算机作为单片机多机通信系统中的主机。rn假如从机共10台,当主机发一个信号10给各个从机,各从机判断是否是给自己发的信号,当1-9号从机发现不是给自己发的信号时,什么也不做,仍实时监控信号。当10号从机发现是给自己的信号后,发给主机一个握手信号,表示握手成功。请问各位大侠如何解决,最好给些例子或建议。多谢
串口 (五) linux串口应用
对<em>串口</em> 的使用 1. 内核打印信息解读 2. dmesg没有显示内核最开始的打印信息,如何调整. 3. 控制台优先级及打印级别 4. dmesg 的使用 1. 内核打印信息解读 pr_notice(&amp;amp;amp;amp;quot;%s&amp;amp;amp;amp;quot;, <em>linux</em>_banner); Linux version 4.4.76 (pop@ubuntu) (gcc version 5.4.0 20160609 (Ubuntu/Linaro...
怎么判断串口接受寄存器目前正有数据,使发送端延迟发送数据,从而实现简单的流量控制?
小弟我现在有一练习,就是在dos平台下,用C语言来实现简单的<em>串口</em>流量控制.rn 有一个问题是:<em>怎么</em>判断<em>串口</em>接受寄存器目前正有<em>数据</em>,使<em>发送</em>端延迟<em><em>发送</em><em>数据</em></em>,从而实现简单的流量控制?我个人看了<em>串口</em>的几个寄存器都没有这个状态信息的.请各位高手指点迷津.
串口发送模块——1字节数据发送
  设计思想与代码规范均借鉴明德扬至简设计法,有不足之处希望大家多提建议,真正做到至简设计。本篇着重提出FPGA通用设计思想,以计数器为核心的代码规范以及VIVADO debug操作流程。   此次试验旨在通过<em>串口</em>试验,讲述FPGA的硬件设计思想和通用设计流程。<em>串口</em>是电子设计中非常常见,可以说掌握了<em>串口</em><em>数据</em>收发,就明白了最基本的时序操作。<em>串口</em>的<em>数据</em>收发过程有其固定的<em>数据</em>格式。下面是本次实验使用的...
Linux串口驱动程序(4)-串口发送分析
1、tty<em>数据</em><em>发送</em>调用关系 <em>怎么</em>样才能找到<em><em>发送</em><em>数据</em></em>所使用的函数呢?打开uart_register_driver函数,找到里面的tty_register_driver,转到定义,这里调用了tty_fops这个结构,这几结构里就保存了读写<em>串口</em>的函数tty_write: static const struct file_operations tty_fops = { .llseek = ...
【请教】 如何判定串口发送完成
发现WriteFile输出<em>串口</em>后,要经过约2ms才能<em>完成</em>输出,rn现在我收写<em>数据</em>需要进行切换(转成485输出),rn这样我需要判定<em>串口</em><em>发送</em><em>完成</em>了然后再改变读写选择rnrn使用WaitCommEvent; 发现EV_TXEMPTY事件还是即刻发生的,即当时输出仍未<em>完成</em>rnrn请教是否有准确的获知<em>串口</em><em>发送</em><em>完成</em>的方法? rnrnrn
STM8 UART串口发送完成中断程序
STM8 UART<em>串口</em><em>发送</em><em>完成</em>中断程序 测试可用。用于高效收发<em>数据</em>,收发均不阻塞CPU运行。
串口发送数据怎么判断数据和已有数组相等?
<em>串口</em><em><em>发送</em><em>数据</em></em>,<em>怎么</em>判断<em>数据</em>和已有数组相等?uint64 a=0x112233445566;n从<em>串口</em>助手<em>发送</em>一串16进制数112233445566,'<em>怎么</em>判断<em>发送</em>的和a相等?
c#串口读取数据,处理数据发送数据问题
我想利用c#不断接收<em>串口</em><em>数据</em>,并处理接收的<em>数据</em>,然后根据相关的计算,<em>发送</em>相关的命令。初步接触c#,不<em>知道</em>该从何处入手,暂时的想法是用动态曲线在主线程实时显示<em>数据</em>的变化,<em>数据</em>是通过<em>串口</em>接收处理的,如果接收的<em>数据</em>超过一定的范围,就<em>发送</em>相关的命令控制其他硬件。rn现在关键是不<em>知道</em>从何处入手,<em>串口</em>接收<em>数据</em>及处理<em>数据</em>需要额外的线程么?rn有没有高手写过相关的程序,能不能发个学习一下,谢谢rnrn
串口发送数据和接受数据的速度不一样
<em>串口</em><em><em>发送</em><em>数据</em></em>和接受<em>数据</em>的波特率<em>怎么</em>自适应匹配,因为两个端口的波特率不一样就会出现乱码,最简单的办法就是之前先约定好波特率。rn但是,条件允许的情况下,我们会增大波特率来加快<em>数据</em>的传输,一旦包错了多了,或者丢了多了,我们又会自适应的减小波特率,我的问题就是<em>怎么</em>使两个端口的波特率自适应的一起改变。
C#串口发送接受数据
<em>发送</em><em>串口</em><em>数据</em>: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.Ports; namespace SendData { class Program { static void Main...
STM32串口发送字节数据
代码如下(<em>串口</em>初始化自行操作):void USART1_Send_Byte(unsigned char byte,int USART_Num) { switch(USART_Num) { case 1:USART_SendData(USART1, byte); while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET); ...
C#串口数据接收与发送
按照伍兄的博文抄下来的。 博文地址:http://www.cnblogs.com/wuhuacong/archive/2011/07/19/2111055.html#commentform 为了赚点下载分。谢谢!
Linux下串口数据发送程序
Linux下<em>串口</em><em>数据</em><em>发送</em>程序,已调试通过。
单片机控制串口数据发送
使用ARM:STM32F103控制RS485<em>数据</em>的<em>发送</em>,I2C通讯
STM32F429 DMA串口数据发送
<em>串口</em><em>数据</em>配置void macUART4_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_AHB1PeriphClockCmd(macUART4_RX_GPIO_CLK|macUART4_TX_GPIO_CLK,ENABLE); RCC_A
微秒级别发送串口数据
在3.0G的CPU上用QueryPerformanceCounter能做到us级别的延时,但是WriteFile到<em>串口</em>时用示波器看到的<em>数据</em>:字节之间的延时似乎不准确,有时延时800us,却得到300us的延时;延时1200us实际却是600us。不<em>知道</em>应该<em>怎么</em>做?rnrn[code=C/C++]rnvoid DelayInUs(int us)rnrn if (0 == _ns_pre_count)rn rn LARGE_INTEGER qwTicksPerSec;rn QueryPerformanceFrequency(&qwTicksPerSec);rn _ns_pre_count = qwTicksPerSec.QuadPart / 1000i64 / 1000i64;rn rnrn LARGE_INTEGER qwTime;rn QueryPerformanceCounter(&qwTime);rn __int64 startime = qwTime.QuadPart;rn __int64 endtime = startime + _ns_pre_count * (__int64)us;rn while ((__int64)qwTime.QuadPart < endtime)rn rn QueryPerformanceCounter(&qwTime);rn rnrnrnWriteFile(com, '\xff', 1, &written, NULL);rnDelayInUs(800);rnWriteFile(com, '\x00', 1, &written, NULL);rnDelayInUs(800);rnWriteFile(com, '\x01', 1, &written, NULL);rn[/code]rn
ARM串口数据发送原理
ARM上的<em>数据</em>是如何发到<em>串口</em>(UART0)上的?最好尽量详细,如中断是如何触发的,<em>数据</em>是怎样从FIFO中发出去的?rn还有想问下为什么波特率越大<em>数据</em>越容易出错?具体的原因啊,<em>数据</em>发的快我是<em>知道</em>的,但是具体导致出错的原理是什么?
使用多线程发送串口数据
我想在主线程外使用另外一个线程通过<em>串口</em><em><em>发送</em><em>数据</em></em>,并同时更新传送百分比,准备将<em>发送</em>的<em>数据</em>分成几段,不<em>知道</em>这样会不会改变<em>发送</em>的波特率,也就是本来协商好的9600的波特率,会不会因为<em>数据</em>的分段而出现误差,接收方采用8051单片机,望各位给点意见,谢谢!
发送
1.前言本来lilo哥哥他自己写了<em>发送</em>端的,他就给了我个写代码的功能,其他功能的插件代码没给我,无聊自己到处copy代码拼了些功能进去。2.功能a.得到web绝对路径b.写文件(fso)c.写文件(ADODB.Stream)--by lilod.执行cmd(wscript.shell)e.列举目录和文件(fso)f.读去文件代码(ADODB.Stream)g.copy文件(ADODB.Stream
串口发送long类型数据
<em>串口</em><em><em>发送</em><em>数据</em></em>,long类型,四字节,范围是0x00 ~ 0x7fffffffrn每次<em>发送</em>1个字节,比如0x7abcdeff,第一次<em>发送</em>7a,第二次<em>发送</em>bc,第三次<em>发送</em>de,第四次<em>发送</em>ffrn接收端在接收到<em>数据</em>后,要组合成原来的样子。rn该<em>怎么</em>操作?用C语言。
多线程发送,接收串口数据
目前多线程接收,解析<em>数据</em>处理好了,但用多线程<em><em>发送</em><em>数据</em></em>时<em>数据</em>出了问题,一是有些指令没有<em>数据</em>返回,二是线程执行顺序是错了,我是用c#.NET 线程池处理的rnrn小弟想实现这样的功能,用多线程<em><em>发送</em><em>数据</em></em>,多线程接收<em>数据</em>,多线程解析<em>数据</em>,保证实时读取<em>串口</em>接收的<em>数据</em>。可下面贴出来的这些方法没有实现要的功能,琢磨了快一个星期了,希望各位大哥指教,能给好的指导思想,有<em>串口</em>多线程<em>发送</em>,接收的项目例子更好。rnrn /// rn /// <em>发送</em>多条指令,用异步的方式接收<em>数据</em>rn /// rn /// <em>发送</em>的<em>数据</em>和读取返回的<em>数据</em>)rn /// true 读取返回的<em>数据</em> false 不返回<em>数据</em>)rn /// rn public bool SendData(string[] cmd, string tagData, bool fag)rn rn DateTime a1 = DateTime.Now;rn //for (int i = 0; i < 1000; i++)rn //rn foreach (string s in cmd)rn rn if (s == string.Empty || tagData == string.Empty)rn return false;rn if (!serialState)rn this.InitPortCom();rn tab = parms.PtlParms(s);rn if (tab == null || tab.Rows.Count == 0)rn return false;rn DataRow frameData = tab.Select(string.Format("type='0' and name='1' ", "Output", "命令长度"))[0];rn int frameLen = Convert.ToInt32(basefun.valtag(frameData["pms"].ToString(), "命令长度")) * 2 + 12;rn byte[] buffData = analy.SetPtlData(tab, tagData);rn serialPort.Write(buffData, 0, buffData.Length);rn this.WaiteSendData(new SendTaskInfo(buffData, s));rn this.WaiteReceiveData(new ReceiveTaskInfo(s, frameLen));rn this.WaitAnalysisData(new ReceiveTaskInfo(s, frameLen));rn rn return true;rn rnrn /// rn /// 开启线程循环<em><em>发送</em><em>数据</em></em>rn /// rn private void WaiteSendData(object data)rn rn if (!serialPort.IsOpen) rn return;rn SendTaskInfo state = data as SendTaskInfo;rn System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ThreadSend), state);rn rnrn /// rn /// 开启线程循环取帧rn /// rn private void WaiteReceiveData(object data)rn rn if (!serialPort.IsOpen) return;rn ReceiveTaskInfo state = data as ReceiveTaskInfo; rn System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ThreadReceive), state);rn rnrn /// rn /// 开启线程解析<em>数据</em>rn /// rn /// rn private void WaitAnalysisData(object data)rn rn if (!serialPort.IsOpen) return;rn ReceiveTaskInfo state = data as ReceiveTaskInfo;rn System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(GetData), state);rn rnrn /// rn /// 开启一个线程<em><em>发送</em><em>数据</em></em>rn /// rn /// rn private void ThreadSend(object state)rn rn SendTaskInfo send = state as SendTaskInfo;rn lock (ThreadObject)rn rn Debug.Write("ThreadSendOne" + " " + send.cmdName + ":" + DateTime.Now.ToString("mm:ss.ffff") + "\r\n");rn SendTaskInfo data = state as SendTaskInfo;rn byte[] buffData = data.sendData;rn serialPort.Write(buffData, 0, buffData.Length);rn Debug.Write("ThreadSendTwo" + " " + System.Text.Encoding.ASCII.GetString(buffData) + ":" + DateTime.Now.ToString("mm:ss.ffff") + "\r\n");rn Thread.Sleep(300);rn rn rnrnrn /// rn /// 开启一个线程接收<em>数据</em>rn /// rn /// rn private void ThreadReceive(object state)rn rn ReceiveTaskInfo task = state as ReceiveTaskInfo;rn List tmpList = new List();rn Debug.Write("ThreadReceive1" + " " + task.cmdName + ":" + DateTime.Now.ToString("mm:ss.ffff") + "\r\n");rn bool lenState = false;rn //manulReadEvent.Reset();rn //bool fag = manulReadEvent.WaitOne();rn //if (!fag) return;rn lock (ThreadObject)rn rn while (!lenState)rn rn if (serialPort.BytesToRead > 0)rn rn byte[] buff = new byte[serialPort.BytesToRead];rn serialPort.Read(buff, 0, buff.Length);rn tmpList.AddRange(buff);rn if (tmpList.Count != task.cmdLen)rn continue;rn elsern rn lenState = true;rn Debug.Write("ThreadReceive2" + " " + tmpList.Count + ":" + DateTime.Now.ToString("mm:ss.ffff") + "\r\n");rn returnBuff.Enqueue(tmpList.GetRange(0, task.cmdLen).ToArray());rn tmpList.Clear();rnrn //manulWriteEvent.Set();rn rn rn elsern break;rn rn rn rnrn /// rn /// 解析<em>数据</em>rn /// rn /// rn private void WaitAnalysisData(object data)rn rn if (!serialPort.IsOpen) return;rn ReceiveTaskInfo state = data as ReceiveTaskInfo;rn System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(GetData), state);rn rnrn /// rn /// 解析<em>串口</em><em>数据</em>rn /// rn /// rn private void GetData(object state)rn rn if (tab == null || tab.Rows.Count == 0 || returnBuff.Count == 0)rn return;rn ReceiveTaskInfo task = state as ReceiveTaskInfo;rn Debug.Write("GetData:" + task.cmdName + ":" + DateTime.Now.ToString("mm:ss.ffff") + "\r\n");rn byte[] buffAll = new byte[0];rn lock (QueueObject)rn rn Debug.Write("returnBuff.Count:" + returnBuff.Count + ":" + DateTime.Now.ToString("mm:ss.ffff") + "\r\n");rn buffAll = returnBuff.Dequeue();rn Debug.Write("buffAll.Count:" + buffAll.Length + ":" + DateTime.Now.ToString("mm:ss.ffff") + "\r\n");rn string len = string.Empty;rn int frameLen = 0;rn byte[] buffTemp = new byte[4];rn for (int i = 0; i < 4; i++)rn rn buffTemp[i] = buffAll[i + 5];rn rn len = GetAscByByte(buffTemp);rn frameLen = Convert.ToInt16(len, 16) + 8;rn if (buffAll.Length < frameLen)rn return;rnrn string returnStr = string.Empty;rn returnStr = GetAscByByte(buffAll);rn Debug.Write(returnStr + ":" + DateTime.Now.ToString("mm:ss.ffff") + "\r\n");rn bool fag = analy.GetPtlData(tab, returnStr, ref data);rn if (!fag) return;rn if (returnData.ContainsKey(task.cmdName.Trim()))rn rn returnData.Remove(task.cmdName.Trim());rn returnData.Add(task.cmdName.Trim(), data);rn rn elsern rn returnData.Add(task.cmdName, data);rn rn Debug.Write(data + "1:" + DateTime.Now.ToString("mm:ss.ffff") + "\r\n");rn if (dataFromPromEventHandle != null)rn dataFromPromEventHandle(this, null);rn Thread.Sleep(300);rn rn rn
求助:串口数据发送问题
/*************************************************rn函数名称 SendCmdrn简要描述 <em>发送</em><em>串口</em>命令<em>数据</em>rn*************************************************/rnvoid CradarDlg::SendCmd()rnrnrn if(m_nSendTimes < 3)rn rn CString SendString = ""; //memory the framern BYTE m_bySendFrame2[7]=0xF1,0x1F,0x00,0x01,0xAA,0xDE,0xFF; rn rn rn bCmdState = FALSE; //禁止其他命令的<em>发送</em>!!rnrn for (int i = 0; i < 7; i++)rn rn SendString += ( char ) m_bySendFrame[i]; //format the framern rnrn m_Port.WriteToPort((LPCTSTR)SendString);rn m_nTimer2s = SetTimer ( 2, 2000, 0 );// 启动1秒定时rn m_nSendTimes ++ ;rn rn else//<em>发送</em>三次都失败rn rn rn bCmdState = TRUE; // 允许其他命令<em>发送</em>rn rn m_nSendTimes= 0; //<em>发送</em>次数清零rn KillTimer(2); rn rnrnrn如上函数, 把m_bySendFrame2[7]=0xF1,0x1F,0x00,0x01,0xAA,0xDE,0xFF作为RS232控制指令<em>发送</em>到rn<em>串口</em>,到0x00就无法<em>发送</em>,实际上是F1 1F ,而不是F1 F 00 01 AA DE FF rn为什么?如何改?
QserialPort 串口数据发送的问题
问题描述: Qbytearray 中每一位能给存储的最大值为127,所以当我的停止位中有0xAA时,显示的其实是-85(为反码), 而且 只能用Qserialport->write()<em><em>发送</em><em>数据</em></em>,其中的参数只能是Qbytearray 或者char* 格式; 解决方法: 发现虽然 显示的是-85 ,但实际<em>发送</em>过去后,下位机依然能给识别为0xAA ,之前一起没成功是因为波特率设置
发送并读取串口数据
我想从<em>串口</em>写一个<em>数据</em>并更具它的响应马上读取,代码如下:rn[code=C/C++]rnvoid ComToolDlg::OnButtonWR() rn // TODO: Add your control notification handler code herern VARIANT varStr;rn CString strTemp;rn CString strOut;rn int i=0;rnrn UpdateData();rn pMainView->testCtrl.ctiic.msComm.GetInput();//先预读缓冲区以清除残留<em>数据</em>rn rn varStr.vt=VT_BSTR;rn strOut.Format("%c",m_byteWithC);rn strOut+="\r";rn varStr.bstrVal=strOut.AllocSysString();//m_strComW;rn pMainView->testCtrl.ctiic.msComm.SetOutput(varStr);rn rn SysFreeString(varStr.bstrVal); rn //---------------rn BYTE rxdata[8]; //设置BYTE数组 An 8-bit integerthat is not signed. rn CString strtemp; rn VARIANT variant_inp;rn COleSafeArray safearray_inp;rn int count1=0;rn int len;rn long k;rnrn m_strComR="";rn m_strComRA="";rnrn Sleep(nSleepTime);//nSleepTime 需要足够大才能接收到<em>数据</em>rnrn while(!(pMainView->testCtrl.ctiic.msComm.GetCommEvent()==2))//事件值为2表示接收缓冲区内有字符 rn Sleep(40);rn count1++;rn if(count1>500)rn AfxMessageBox("empty");rn goto LabelEnd;rn rn ;rn rn variant_inp=pMainView->testCtrl.ctiic.msComm.GetInput(); //读缓冲区 rn safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 rn len=safearray_inp.GetOneDimSize(); //得到有效<em>数据</em>长度 rn for(k=0;k
stm8串口发送数据不正确
程序代码:rn#include"iostm8l152k4.h"rn/*******************************************************************************rn****入口参数:无rn****出口参数:无rn****函数备注:USART初始化函数rn****版权信息:蓝旗嵌入式系统rn*******************************************************************************/rnvoid Init_USART1(void)rnrn CLK_PCKENR1 |= (1<<<<<3);rn //配置USART参数rn USART1_CR1=0x00;rn USART1_CR2=0x00;rn USART1_CR3=0x00;rn // 设置波特率,必须注意以下几点:rn // (1) 必须先写BRR2rn // (2) BRR1存放的是分频系数的第11位到第4位,rn // (3) BRR2存放的是分频系数的第15位到第12位,和第3位rn // 到第0位rn // 例如对于波特率位9600时,分频系数=2000000/9600=208rn // 对应的十六进制数为00D0,BBR1=0D,BBR2=00rnrn USART1_BRR2=0x00;rn USART1_BRR1=0x0d;rnrn USART1_CR2=0x2c;//允许接收,<em>发送</em>,开接收中断rnrn/*******************************************************************************rn****入口参数:需要<em>发送</em>的<em>数据</em>rn****出口参数:无rn****函数备注:USART<em>发送</em>函数rn****版权信息:蓝旗嵌入式系统rn*******************************************************************************/rnvoid USART1_sendchar(unsigned char c)rnrn while((USART1_SR & 0x80)==0x00);//检测<em>数据</em>是否<em>发送</em><em>完成</em>rn USART1_DR=c;rnrn/*******************************************************************************rn****入口参数:无rn****出口参数:无rn****函数备注:计算机通过<em>串口</em>调试助手可以接收开发板UART<em>发送</em>的十六进制<em>数据</em>,跳线RXD-UT TXD-URrn****版权信息:蓝旗嵌入式系统rn*******************************************************************************/rnint main( void )rnrn unsigned char i=0;rn Init_USART1();rn while (1)rn rn USART1_sendchar(i);rn i++;rn rn return 0;rnrnrn应该是从0传到0xFF,但接收到的<em>数据</em>和程序设置的不一样。[img=https://img-bbs.csdn.net/upload/201801/16/1516094348_650910.png][/img]rn求各位同僚指点
通过串口发送大量数据
我在通过<em>串口</em><em>发送</em>大量<em>数据</em>时,会用到sleeprn但是我的程序就假死掉了,直到<em>发送</em>完毕才能回复正常rn我在每个sleep后加上,application.processmessages,窗口就正常了,但是点击关闭按钮没反应?rnrn另外,<em>发送</em>大量<em>数据</em>时,到后来<em>发送</em>的越来越慢,慢到很慢很慢,<em>怎么</em>回事呢? rnrn我用的SPCOMM
关于串口发送float数据
1.关于<em>数据</em>格式的基本知识 符号 大小 占用 <em>数据</em>长度 float 4个字节 32位 double 8个字节 64位 char 1个字节 8位 int 4个字节 32位 1字=2字节(1 word = 2 byte)1字节=8位(1 byte = 8bit) 2.数组在函数中作为形参引用形参和实参都是数组名。 m
串口发送16进制数据问题
编写一个<em>串口</em>通信程序,16进制<em><em>发送</em><em>数据</em></em>,数字可以比如11010222,但是比如11ff0222这类带字母的<em>发送</em>不成功,请帮忙看看,下面是我的<em>发送</em>和接收程序 rnvoid CCommPortDlg::OnDataArrivedMsg(WPARAM wParam,LPARAM lParam) rn rn//处理收到的<em>数据</em> rnint length=(int)lParam; rnchar *data=(char*)wParam; rnCString THex(_T("")); rnrnint i; rnrnif(length!=0) rn rnif(HexDisplay) rn rnfor(i=0;i ='0'&&m_strTransmit.GetAt(i*2) ='A'&&m_strTransmit.GetAt(i*2) ='0'&&m_strTransmit.GetAt(i*2+1) ='A'&&m_strTransmit.GetAt(i*2+1) ='A'&&m_strTransmit.GetAt(i*2) ='0'&&m_strTransmit.GetAt(i*2+1) ='A'&&m_strTransmit.GetAt(i*2+1) ='0'&&m_strTransmit.GetAt(i*2+1) ='0'&&m_strTransmit.GetAt(i*2) WritePort(buf,dwCharToWrite); rnif(dwBytesWritten==0) rn rnAfxMessageBox(_T("无法向端口写入<em>数据</em>!")); rn rndelete[] buf; rn rn
串口数据发送如何包装
假设(MCU)<em>串口</em>要<em>发送</em>这样的一系列命令rnrn同步头 + 地址码 + 命令字 + <em>数据</em>长度 + <em>数据</em>正文 + 校验码rnrn一、将<em>数据</em>丢到sendbuf, 然后使用 [code=c]void send_command(uint8_t * sendbuf, uint8_t length)[/code]类似的函数<em>发送</em>出去rn这样操作简单点,方便传输rnrn二、用struct将一帧<em>数据</em>封装起来,方便调用rn[code=c]typedef struct __FrameDatarnrn uint8_t head ;rn uint8_t addr ;rn uint8_t command ;rn uint8_t length ;rn uint8_t data[VARIABLE];rn uint8_t checksum ;rnFrameData ;[/code]rn使用[code=c] void send_command(FrameData * data)[/code]类似的函数<em>发送</em>rnrn以前一直用第一种方法,以后想用第二种,但具体细节不清楚(比如相关操作的API)rnrn请大家指点下,或者有相关例子学习下(<em>linux</em>内核啥的,我看不懂)
WINAPI串口发送不了数据
程序为基于对话框的程序,使用WINAPI作为<em>串口</em>操作方式。查过很多资料,但是还是没搞清楚到底哪个地方出问题了,特发江湖救急令,希望各位多多帮助。具体<em>串口</em>部分代码如下:rn<em>串口</em>初始化:rn m_bConnected=FALSE; rn m_pThread=NULL;rn m_nBaud = 9600;rn m_nDataBits = 8;rn m_nParity = 0;rn m_sPort = "COM1";rn m_nStopBits = 0;rn在OnInitDlg中初始化相关事件:rn //为WM_COMMNOTIFY消息创建事件对象,手工重置,初始化为有信号的rn if((m_hPostMsgEvent=CreateEvent(NULL, TRUE, TRUE, NULL))==NULL)rn return FALSE;rn //初始化读写Overlapped对象rn memset(&m_osRead, 0, sizeof(OVERLAPPED));rn memset(&m_osWrite, 0, sizeof(OVERLAPPED));rnrn if((m_osRead.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL))==NULL)rn return FALSE;rnrn if((m_osWrite.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL))==NULL)rn return FALSE;rn<em>串口</em>监听线程:rnUINT CommProc(LPVOID pParam)rnrn OVERLAPPED os;rn DWORD dwMask, dwTrans;rn COMSTAT ComStat;rn DWORD dwErrorFlags;rn memset(&os, 0, sizeof(OVERLAPPED));rn CDAConvertDlg *pDlg=(CDAConvertDlg*)pParam;rn rn os.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);rn if(os.hEvent==NULL)rn rn AfxMessageBox("Can't create event object!");rn return (UINT)-1;rn rn while(pDlg->m_bConnected)rn rn ClearCommError(pDlg->m_hCom,&dwErrorFlags,&ComStat);rn if(ComStat.cbInQue)rn rn // ÎÞÏ޵ȴýWM_COMMNOTIFYÏûÏ¢±»´¦ÀíÍêrn WaitForSingleObject(pDlg->m_hPostMsgEvent, INFINITE);rn ResetEvent(pDlg->m_hPostMsgEvent);rn //֪ͨÖ÷´°¿Úrn PostMessage(pDlg->m_hWnd,WM_COMMNOTIFY,EV_RXCHAR,0);rn continue;rn rn dwMask=0;rn if(!WaitCommEvent(pDlg->m_hCom, &dwMask, &os)) // Öصþ²Ù×÷rn rn if(GetLastError()==ERROR_IO_PENDING)rn // ÎÞÏ޵ȴýÖصþ²Ù×÷½á¹ûrn GetOverlappedResult(pDlg->m_hCom, &os, &dwTrans, TRUE);rn elsern rn CloseHandle(os.hEvent);rn return (UINT)-1;rn rn rn rn CloseHandle(os.hEvent);rn return 0;rnrn<em>串口</em>打开:rnBOOL CDAConvertDlg::OpenConnection()rnrn COMMTIMEOUTS TimeOuts;rn m_hTermWnd=GetSafeHwnd();rn if(m_bConnected)rn rn return FALSE;rn rn m_hCom=CreateFile(m_sPort, GENERIC_READ | GENERIC_WRITE, 0, NULL,rn OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, rn NULL);rn if(m_hCom==INVALID_HANDLE_VALUE)rn return FALSE;rn SetupComm(m_hCom,MAXBLOCK,MAXBLOCK);rn SetCommMask(m_hCom, EV_RXCHAR);rnrn TimeOuts.ReadIntervalTimeout=MAXDWORD; rn TimeOuts.ReadTotalTimeoutMultiplier=0; rn TimeOuts.ReadTotalTimeoutConstant=0; rnrn TimeOuts.WriteTotalTimeoutMultiplier=50;rn TimeOuts.WriteTotalTimeoutConstant=2000;rn SetCommTimeouts(m_hCom, &TimeOuts);rn if(ConfigConnection())rn rn m_pThread=AfxBeginThread(CommProc, this, THREAD_PRIORITY_NORMAL, rn 0, CREATE_SUSPENDED, NULL);rn if(m_pThread==NULL)rn rn CloseHandle(m_hCom);rn return FALSE;rn rn elsern rn m_bConnected=TRUE;rn m_pThread->ResumeThread(); rn rn rn elsern rn CloseHandle(m_hCom);rn return FALSE;rn rn return TRUE;rnrn写<em>串口</em>:rnDWORD CDAConvertDlg::WriteComm(char *buf, DWORD dwLength)rnrn BOOL fState;rn DWORD length=dwLength;rn COMSTAT ComStat;rn DWORD dwErrorFlags;rnrn ClearCommError(m_hCom,&dwErrorFlags,&ComStat);rn fState=WriteFile(m_hCom,buf,length,&length,&m_osWrite);rnrn if(!fState)rn rnrn if(GetLastError()==ERROR_IO_PENDING)rn rn GetOverlappedResult(m_hCom,&m_osWrite,&length,TRUE);// µÈ´ýrn rn elsern length=0;rn rn return length;rn
串口按二进制数据发送
我要通过<em>串口</em>按二进制<em>数据</em><em>发送</em>,但不<em>知道</em>在VC下如何进行,我已编好了以char 的形式<em>发送</em>的程序,如何将其改为以byte 形式<em>发送</em>?
51单片机串口发送不了数据
以下是程序rn #include rn#includern#include "18b20.h"rn#include "1602.h"rn#include "delay.h"rn#include "dht11.h"rnrn#define KeyPort P1rnsbit SPK=P2^5;rnbit ReadTempFlag;//定义读时间标志rnbit ReadDamFlag;rnvoid Init_Timer0(void);//定时器初始化rnunsigned char KeyScan(void);//键盘扫描rn/*------------------------------------------------rn <em>串口</em>通讯初始化rn------------------------------------------------*/rnvoid UART_Init(void)rnrn SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收 rn TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装rn TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz rn TR1 = 1; // TR1: timer 1 打开 rn //EA = 1; //打开总中断rn //ES = 1; //打开<em>串口</em>中断rn TI=1;rnrn/*------------------------------------------------rn 主函数rn------------------------------------------------*/rnvoid main (void)rn rnint temp,tempH=20,tempL=10;rnint dam,damH=60,damL=20;rnfloat damh;rnfloat temperature;rnchar displaytemp[16],num;//定义显示区域临时存储数组rnrnLCD_Init(); //初始化液晶rnDelayMs(20); //延时有助于稳定rnLCD_Clear(); //清屏rnInit_Timer0();rnUART_Init();rnLcd_User_Chr(); //写入自定义字符rnrnLCD_Write_String(0,0,"www.jyumcu.com");rnLCD_Write_String(0,1,"welcome");rnwhile (1) //主循环rnDelayMs(20);rn num=KeyScan();rn switch(num)rn rn case 1:if(tempH-55)tempH--;break;rn case 3:if(tempL-55)tempL--;break;rn case 5:if(damH-40) damH--;break;rn case 7:if(damL-40) damL--;break;rn default:break;rn rn rn sprintf(displaytemp,"DH=%3d DL=%3d",damH,damL);rn LCD_Write_String(0,1,displaytemp);rn DelayMs(20);rn sprintf(displaytemp,"H=%3d L=%3d ",tempH,tempL);//输出温度上限下限rnrn LCD_Write_String(0,1,displaytemp);//显示第二行rn rnrn damh=DHT11_ReadTempAndHumi();rn if(damh>damH)rn LCD_Write_String(0,0," over DAMH");rn else if (damh>=4;rn if(temp>tempH)rn LCD_Write_String(0,0," over tempH ");rn else if(temptempH ||tempdamH || dam
串口数据发送格式问题
设备需要的指令是:6个字节的<em>数据</em>([color=#FF0000]F0 70 41 69 52 FE[/color] )rn在C#里面直接<em>发送</em>serialPort1.Write("\u00f0pAiR\u00fe"); 设备收到的却是:3F 70 41 69 52 3F 就错了!rn有大神<em>知道</em>应该如何写吗? \u0000是微软官方提供的写法rn[img=https://img-bbs.csdn.net/upload/201510/09/1444358591_277497.jpg][/img]
发送数据为何与VC发送数据不一样?
这是JAVA<em>发送</em>的<em>数据</em>rnsmsfs="000000530200004demo00000AC000091680011001113800000000"rnout.println(smsfs);//<em>发送</em>信息rnrn这是vc<em>发送</em>的<em>数据</em>rnrnm_Client.Send(smsfs.GetBuffer(0),smsfs.GetLength(),0)rn为何在服务端处理时vc可以通过,java不能通过,提示<em>数据</em>包错误rn请大家帮帮忙解决一下
串口发送32bit数据Verilog
<em>发送</em>机部分如下: `define NUMBER 41//32bit字符<em>数据</em>的长度(要加上起始位和停止位) //`define NUMBER 11//8bit字符<em>数据</em> //`define NUMBER 21//16bit字符<em>数据</em> //`define NUMBER 31//24bit字符<em>数据</em> `define NUMWIDTH 5//NUMBER的范围0~64 //`define NUMWIDTH 4
STM32---DMA串口数据发送
#define USART1_DR_Base  0x40013804/* Private macro -------------------------------------------------------------*//* Private variables ---------------------------------------------------------*/#defin...
C#串口发送接受数据
<em>发送</em><em>串口</em><em>数据</em>: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.Ports; namespace SendData {     class Program     {         static void Main
串口数据接收和发送
对于ARM7<em>串口</em>接收、<em><em>发送</em><em>数据</em></em>的处理中,一般都会涉及到中断,但是有时候有的<em>数据</em>可以丢弃,有的必须接收或<em>发送</em>。有两种处理方法: 1、中断优先级的设置可以。中断的话,直接调用自己的中断处理函数。 2、可以用查询方式来接收或<em>发送</em>。查询的话,直接查看接收或<em>发送</em>状态(LPC2000里好像是LSR寄存器),根据状态来接受或<em>发送</em>。 对于多<em>串口</em>操作,个人觉得,可以用查询方式+中断方式来处理。
串口数据发送的方法
我现在正在做一个项目,其中一个功能如下:rn 采用两个缓冲区,每个缓冲区有170个<em>数据</em>元素,程序运行时,后台缓冲区从硬件获取<em>数据</em>,前台缓冲区的<em>数据</em>通过<em>串口</em><em>发送</em>出去。rn 该项目中需要用到了8个<em>串口</em>,我采用115200的波特率<em><em>发送</em><em>数据</em></em>,主要有一下两个方案:rn (1)每一个<em>串口</em>对应一个<em>发送</em>线程,根据协议<em>发送</em>前台缓冲区的170帧<em>数据</em>,在获取<em>数据</em>的线程中,从硬件中读取<em>数据</em>到前台缓冲区中,并且当后台缓冲区填满了170帧后检查前台缓冲区的所有<em>数据</em>,即每个<em>串口</em>是否<em>发送</em>完毕,只要有一个没有<em>发送</em>完,就报警,同时切换前后台缓冲区,即前台缓冲区切换到后台,后台缓冲区切换到前台。这样作的问题是:系统线程太多,如果有其他程序干扰时,很容易出现<em>数据</em>没有<em>发送</em>完毕的情况。rn (2)所有<em>串口</em>对应一个<em>发送</em>线程,在这个线程中采用异步的方式逐个<em>发送</em>每个<em>串口</em><em><em>发送</em><em>数据</em></em>,这样做效果好像有所改进,但是需要每次等待所有<em>串口</em><em>发送</em>发功完毕,才能进行下一帧<em>数据</em><em>发送</em>。目前我没有进行等待,只是简单的调用了一下sleep函数,不<em>知道</em>这样做有没有问题。rn 希望有经验的大侠给一些思路,谢谢
串口数据发送和接收类
用于<em>串口</em>的<em>数据</em><em>发送</em>和接收,用之前必须先建立连接,否则将报异常
串口设备数据发送接收
我有一个简单的<em>串口</em>设备,叫满意度评价器。rn控制它需要传递参数分别为0x01、0x02、0x03、0x04、0x05、0x06、0x07、0x08、0x09、0x0a(十种情况)rn采用win API 函数 WriteFile()我不会传递,所以用mscomm32.ocx,ole_1.object.output = blob(char(1)) 可以实现<em>发送</em>0x01的效果。同样blob(char(2~10))能分别实现以上所有功能。rn然而,接收时出现问题:我是用rnBOLB lb_datarnIF ole_1.object.InBufferCount <> 0 THEN rn lb_data=ole_1.object.inputrn if lb_data = blob(char(1)) thenrn //没有进入rn end ifrn if lb_data = blob(char(2)) thenrn //没有进入 rn end ifrn if lb_data = blob(char(3)) thenrn //没有进入 rn end ifrn if lb_data = blob(char(4)) thenrn //没有进入 rn end ifrnEND IFrn设备说明上说接收到的<em>数据</em>应该分别为0x01、0x02、0x03、0x04rn我应该如何处理?如何判断接收到的<em>数据</em>?rnrn如果采用WIN API 函数如何传递以上<em>数据</em>?rn我发现mscomm32.ocx不好用,每次开机都要我重新注册,所以如果可能最好还是用 WIN API 函数。
串口发送16进制的数组怎么发送啊!
<em>发送</em>字符串可以<em>发送</em>,<em>发送</em>16进制<em>怎么</em><em>发送</em>啊!rn例如:rncomm.Write(“HELLO”);//这样<em>串口</em>就<em>发送</em>字符HELLO了,但我要<em>发送</em>数组的<em>数据</em>,例如rnList buf = new List();rnbuf[0] = 0xAA;rnbuf[1] = 0x55;rnbuf[2] = 0xFF;rncomm.Write//这个该<em>怎么</em>写呢?
stm32串口发送MPU6050数据
包含了正点原子全系STM32<em>串口</em><em>发送</em>MPU6050<em>数据</em>的程序。
串口与rtu通讯,数据发送
mfc编写的<em>串口</em>通讯,觉得好懂。窗口简单明快
串口数据的接受和发送
由于网上<em>串口</em>屏的资料比较少 ,所以对于刚刚入门的小伙伴来说可能无从下手,<em>串口</em>屏<em>数据</em>的收发<em>数据</em>是<em>串口</em>屏最重要的功能,我自己写了一个<em>串口</em>屏<em>数据</em>收发的程序。我用的是stm32f103迷你板。 我代码里写的是一个电压的采样 然后在<em>串口</em>屏上显示出来,同时我程序里也写了通过<em>串口</em>屏<em><em>发送</em><em>数据</em></em>的 <em>串口</em>屏上会有一个键盘输入 输入完按确定就能将<em>数据</em><em>发送</em>出去,同时我加了一个oled屏(四角)的代码,<em>发送</em>的<em>数据</em>可以在oled上显示当然了你也可以通过改一下上位机的内容来让他在<em>串口</em>屏上显示。 大家有不懂得都可以问我,希望大家看完后都能给个好评呢!
Stm32串口发送字符串数据
ps:把字符串分成字节循环<em>发送</em> #include "stm32f10x.h" #include "stm32f10x_rcc.h" #include "stm32f10x_gpio.h" #include "stm32f10x_usart.h" #include "stm32f10x_crc.h" #include "system_stm32f10x.h" #include "s
串口数据接收和发送程序
<em>串口</em><em>数据</em>接收和<em>发送</em>程序,用于调试<em>串口</em><em>数据</em>的接收状态和<em>数据</em>的显示。
Stm32串口发送字节数据
#include "stm32f10x.h" #include "stm32f10x_rcc.h" #include "stm32f10x_gpio.h" #include "stm32f10x_usart.h" #include "system_stm32f10x.h" void RCC_Configuration(void); void GPIO_Configuration(void);
C#----串口数据接收发送
虚拟<em>串口</em>驱动工具,创建俩个虚拟<em>串口</em>,如图:   创建两个Console模拟<em>串口</em>的<em>发送</em>接收<em>数据</em> C#<em>串口</em><em>数据</em>接收<em>发送</em>,类空间: using System.IO.Ports;   C# 串行端口 接收<em>数据</em>,代码如下: //遍历串行端口名称数组 foreach (string port in System.IO.Ports
串口发送非字符数据
我在两台机器上,作了两个程序,互相用<em>串口</em>通信。现在我的程序通过CMsComm控件的SetSettings方法,向<em>串口</em>些<em>数据</em>。如果我写一个字符串后面加上'\n',另一台机器就可以收到。如果不加'\n',那台机器永远也收不到。不知为什么。是不是<em>串口</em>不能<em>发送</em>非字符<em>数据</em>。
怎样写串口数据发送子程序
我现在要以ASIC的格式向一个<em>串口</em><em><em>发送</em><em>数据</em></em>应该<em>怎么</em>写rn<em>串口</em>的句柄为:hCommDevrn而<em>数据</em>是从文本框中读过来的,文本框关联了一个CString的变量rn但是这个Unicode <em>怎么</em>转换为ASICrn并且想<em>串口</em><em><em>发送</em><em>数据</em></em>rn好象书上使用了函数:WriteFile(hCommDev,(BYTE*)sc,rnstrlen(sc)*2,&dw,NULL);rn好象他在前面将Unicode形式转换为了ASIC类型的,但是还是有点不懂,能否解释一下,为什么要这样写 rn能不能根据上面的程序提供一个子程序,rn谢谢了rn
求助 串口发送hex数据
需要向<em>串口</em> hex<em>发送</em>: ff_01_00_04_ff_00_04 (_为空格)rn我的代码rn[code=c]rnchar ch_OutBuffer[]=0xff , ' ', 0x01 , ' ', 0x00 , ' ', 0x04, ' ',rn 0xff, ' ', 0x00, ' ', 0x04;rnDWORD w_BytesWrite = 8;rnWriteFile(hCom, ch_OutBuffer, w_BytesWrite, &w_BytesWrite, NULL);rn[/code]rn但是没有收到<em>数据</em>。rn我觉得是我ch_OutBuffer这个格式不对...rn[code=c]rnchar ch_OutBuffer[]='f ', 'f' , ' ', '0' , '1' ,' ' , '0', '0', ' ', '0', '4', ' 'rn, 'f', 'f', ' ', '0', '0', ' ', '0', '4';rn[/code]rn这样设置就没有16进制了。rnrn就是<em>串口</em>助手里有一个选项“hex<em>发送</em>”这个的功能~~~rn注:dcb已经设置无误。
数据库 第3版课堂教学课件下载
本压缩包中包括《数据库系统原理及应用教程》第三版的课堂教学课件 以及 上机实验指导书 相关下载链接:[url=//download.csdn.net/download/candytjw20/2135300?utm_source=bbsseo]//download.csdn.net/download/candytjw20/2135300?utm_source=bbsseo[/url]
SiS 7012 PCI Audio Driver下载
sis 7012声卡驱动。Windows 95/98/Me/NT4/Win2000/WinXP/WinServer2003/WinXP 相关下载链接:[url=//download.csdn.net/download/jackhope/2192327?utm_source=bbsseo]//download.csdn.net/download/jackhope/2192327?utm_source=bbsseo[/url]
c语言日历程序源码,显示当前日历下载
有冗错功能,用c语言编写,输入1——3000,显示该年一月日历,根据提示显示上一月,下一月,退出 相关下载链接:[url=//download.csdn.net/download/hj19900120/3254789?utm_source=bbsseo]//download.csdn.net/download/hj19900120/3254789?utm_source=bbsseo[/url]
相关热词 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd c# 操作sql视图
我们是很有底线的