串口如何接收数据,接收到又如何处理

单片机串口通过查询接收数据,同时具备接收超时、异常判断,常规通用处理算法实现 HAL_UART_Transmit函数用于将接收到的数据发送回去,在实际应用中,你可能需要将这些数据用于其他目的。如果接收到数据,它将返回1,并将接收到的数据存储到缓冲区中。另外,这段代码使用了HAL_GetTick()函数来获取当前的时间(以毫秒为单位),你需要确保你的系统中已经启动了HAL的滴答定时器。处理接收到的数据:如果接收到数据且未超时,则处理这些数据,比如存储到缓冲区或者进行进一步的处理。(5)清理和重置:在每次接收完成后,需要清理串口的状态,重置相关变量,以便进行下一次的接收。 阅读详情

 点击

 

http://topic.youkuaiyun.com/u/20090728/09/1E9D9C81-FC4A-4025-B350-A4D44E28E566.html

using System.IO.Ports;using System.Threading;

using System.IO;
namespace SerialPortDemo
{ 
public partial class Form1 : Form 
{ bool isStar = false;
 Thread threadReceive = null;
 SerialPort serialPort = null;
 int i = 0; int k = 0; public Form1() 
{ InitializeComponent();
 this.comboBox1.SelectedIndex = 0;
 this.comboBox2.SelectedIndex = 2;
 serialPort = new SerialPort(); 
if (serialPort.IsOpen) serialPort.Close(); 
//获得参数 
serialPort.PortName = comboBox1.SelectedItem.ToString();
 serialPort.BaudRate = int.Parse(comboBox2.SelectedItem.ToString());
 serialPort.Open(); ThreadStart method = new ThreadStart(ReceiveData);
//在线程上执行此方法 
threadReceive = new Thread(new ThreadStart(method)); 
} 
private void button1_Click(object sender, EventArgs e)
 { try { if (button1.Text == "接收数据")
 { 
if (!isStar)
//如果isStar等于true,则启动线程
 { 
threadReceive.Start(); this.toolStripStatusLabel1.Text = "正在接收数据......"; 
} 
else { 
threadReceive.Resume();
//如果isStar等于false,则解除挂起线程 this.toolStripStatusLabel1.Text = "暂停接收..."; }
 button1.Text = "停止接收"; }
 else
 { 
threadReceive.Suspend();
//如果是"停止接收",则挂起线程
 button1.Text = "接收数据"; 
this.toolStripStatusLabel1.Text = "暂停接收..."; 
}
 }
 catch (Exception ex) 
{ MessageBox.Show(ex.Message); serialPort.Close();
 }
 } 
//不断循环接收数据
 private void ReceiveData()
 { 
while (true) 
{ Thread.Sleep(500); 
this.isStar = true;
 this.SynReceiveData(); 
}
 } 
//通过串口取数据 
private void SynReceiveData()
 { MessageBox.Show("接收数据" + k);
 k++;
 string inputData = serialPort.ReadExisting(); 
try 
{ if (inputData != string.Empty) 
{ if (inputData.Trim().Length == 45)
 { SetText(inputData); 
}
 }
 }
 catch (Exception ex) 
{
 MessageBox.Show(ex.Message);
 } 
} 
//分隔字符串并保存在指定目录下
 private void SetText(string str)
 {
 string aa = str;
 StreamWriter sw = null;
 if (aa != string.Empty) 
{ 
string aaa = aa.Insert(13, ","); 
aaa = aaa.Insert(32, ",");
 String fileName = "C:\\GAJ_PUB\\kaoqin";
 if (Directory.Exists(fileName) == false)
//如果目录不存在 
{ Directory.CreateDirectory(fileName);
//创建目录 sw = File.CreateText("C:\\GAJ_PUB\\kaoqin\\person" + i + ".txt");//创建文本 
} 
else
 { 
sw = File.CreateText("C:\\GAJ_PUB\\kaoqin\\person" + i + ".txt"); 
}
 sw.WriteLine(aaa);
 sw.Flush();
 sw.Close(); 
i++;
 MessageBox.Show("文件已存入指定目录下!!");
 }
 }
 private void button2_Click(object sender, EventArgs e)
 {
 if (threadReceive.ThreadState==ThreadState.Running)
//当前状态为启动线程 
{ threadReceive.Abort(); this.Close();
 } 
else if
 (threadReceive.ThreadState == ThreadState.Suspended)
//当前状态为挂起线程 
{ 
threadReceive.Resume();
 threadReceive.Abort();
 this.Close(); 
} 
else if
 (threadReceive.ThreadState == ThreadState.SuspendRequested)//当前状态为正在挂起线程 
{ 
threadReceive.Resume();
 threadReceive.Abort();
 this.Close();
 } 
else if
 (threadReceive.ThreadState == ThreadState.Unstarted) 
{ 
this.Close();
 }
 } 
private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ if (threadReceive.ThreadState == ThreadState.Running)
//当前状态为启动线程 
{
 threadReceive.Abort();
 this.Close(); 
}
 else if(threadReceive.ThreadState == ThreadState.Suspended)
//当前状态为挂起线程
 { 
threadReceive.Resume(); 
threadReceive.Abort();
 this.Close();
 } 
else if
 (threadReceive.ThreadState == ThreadState.SuspendRequested)
//当前状态为正在挂起线程
 { 
threadReceive.Resume(); 
threadReceive.Abort();
 this.Close(); 
}
 }
 }
} 
 

C# 解决串口接收数据不完整处理方法 使用缓存机制完成。 首先通过定义一个成员变量List<byte>buffer=newList<byte> (4096); 用来存放所有的数据, 在接收函数里,通过buffer.AddRange()方法不断地将接收到的数据加入到buffer中,并同时对 buffer中的数据进行检验, 如果达到一定的长度并且校验结果正确(校验方法在发送方和接收方一致),再进行处理。 //针对数据协议:head + len + playload + check 类型 private... 阅读详情

相关推荐

C# SerialPort串口通信发送接收,处理接收数据完整

本文介绍C#串口通讯,并通过实例讲解使用方法,解决了数据接收不完整问题

qq_30725967的博客 3万+

32入门-串口通信-发送和接收数据

在实际的串口中,只能发送二进制数,也就是十六进制的最直接数据。如果想发送字符,就需要一个数据->字符的映射表(如ASCII表)

祖国花朵的博文 6800

C#串口通信发送接收:处理接收数据完整信息与通信

本文将介绍如何使用C#的SerialPort类进行串口通信,并处理接收数据的完整性,以确保正确地接收和解析数据。通过设置串口参数、发送数据和处理接收数据,我们可以实现与外部设备的数据交换。在上述代码中,我们使用ReadExisting方法来读取接收到的数据,并进行相应的处理。首先,我们需要在代码中引入System.IO.Ports命名空间,该命名空间提供了SerialPort类,可以用于串口通信。接下来,我们需要创建SerialPort对象,并设置串口的相关参数,例如波特率、数据位、停止位和奇偶校验等。

ReElixir的博客 880

串口通信整理:三、数据接收

FPGA串口整理

qq_48838000的博客 1536

单片机高频率串口接收数据的处理方法

这种方法可以确保数据的实时性和准确性,适用于需要高频率串口数据处理的嵌入式应用。请注意,以上提供的源代码示例是基于C语言的,适用于某些特定的单片机平台(例如AVR系列)。如果您使用的是其他单片机平台或编程语言,需要根据具体平台和语言进行相应的调整和实现。为了处理高频率的串口数据,需要设计一个合适的接收缓冲区。波特率是指每秒传输的位数,它决定了数据传输的速度。在主循环中,通过检查接收缓冲区的头尾指针,判断是否有新的数据到达。通过使用中断服务程序,可以实现高效的串口数据接收,并将接收到的数据存储到缓冲区中。

RlDart的博客 582

C#进行串口应用开发如何处理串口通信时接收数据缓冲区溢出的问题

在C#进行串口通信开发时,接收数据缓冲区溢出是一个常见的问题,尤其是在数据传输速率较高或数据处理速度较慢的情况下。缓冲区溢出会导致数据丢失,从而影响通信的可靠性。

zhangzhechun的专栏 824

串口收发数据

所谓中断是用于处理突发事件的,你首先要开启中断(CPU允许,自己开启),然后编写中断服务函数,当中断事件产生的时候,代码回自动进入到中断服务函数去执行,执行完返回原来的地方继续执行原有程序。接收数据要等待,如果没有数据过来不做其它事情,这样是不合理的,有什么办法可以处理这件事?中断处理过程:异常(中断)中断源-->允许中断-->申请中断--> CPU 响应-->保护现场(栈)--> 跳转处理-->返回。优先级代表谁先谁后,在这里代表谁先执行,谁后执行,说的是中断,意思是多个中断一起触发谁先执行。

Yangtzey的博客 3546

当LightGBM推理遇上GPU:3种替代方案性能对比(含ONNX实战代码)

本文针对LightGBM官方不支持GPU推理的性能瓶颈,深度评测了RAPIDS cuML、ONNX Runtime GPU和Triton Inference Server三种GPU加速推理替代方案。通过详尽的性能对比和实战代码,为高并发、低延迟的在线预测场景提供了清晰的选型指南,帮助工程师打破推理性能枷锁,实现显著的吞吐量提升。

salt9的博客 813

STM32-串口通信(串口的接收和发送)

STM32串口通信,串口的接收和发送

cyaya6的博客 14万+

LabVIEW实战:基于DAQmx的实时正弦波生成、采集与波形图动态显示

本文详细介绍了如何使用LabVIEW和DAQmx驱动实现实时正弦波的生成、采集与动态显示。通过USB-6008数据采集卡,结合队列缓冲机制和动态波形图显示技术,构建了一个完整的信号处理系统。文章包含硬件连接、软件配置、任务设置及常见问题排查,适合LabVIEW初学者和硬件控制开发者参考。

weixin_30872337的博客 124

拯救者R7000P(2021)装双系统Ubuntu20.04 解决联发科MT7921无线网卡在Ubuntu中不能联网

拯救者R7000P(2021)装双系统Ubuntu20.04/Ubuntu18.04 电脑配置:联想拯救者R7000P CPU:AMD R7-5800H GPU:RTX3060-6G 内存:16GB 固态:500G(原装)+500(加装) 1.做系统盘(本文以Ubuntu20.04为例) 1.下载Ubuntu20.04镜像 直接去Ubuntu官网或者一些国内的镜像去下载都可以,这里给出一个网址https://ubuntu.com/download/desktop,根据需要下载自己学要的Ubuntu版本,后缀

qq_41108639的博客 1万+

关于串口数据的发送和接收(调试必备)_串口数据的接收与处理

设置好寄存器后,就可以包含头文件进来STDIO.h,调用函数printf就可以了,下面是效果图掌握了这个技巧,就可以随时通过printf的方便性,将程序的寄存值,或者内存变量的值输出出来,人机交互非常方便。今天就暂时写在这里,后面会更新关于数据的接收的程序思路。-------------------------------------续更2020/2/18在学习串口数据的接收之前,首先我们总结一下之前的printf的发送程序。1、需要包含STDIO.h库文件2、需要配置串口波特率等基本设置,并且只是输出的话

2401_84264662的博客 1873

打通Creo与Matlab的桥梁:Simscape Multibody Link插件安装与配置全攻略

本文详细介绍了Simscape Multibody Link插件的安装与配置全流程,旨在帮助机械工程师和开发者打通Creo与Matlab/Simulink之间的桥梁,实现CAD模型到多体动力学仿真的高效转换。文章重点解析了版本兼容性、管理员权限、注册文件配置等关键步骤与常见故障排查方法,助力用户快速建立设计与仿真一体化工作流。

rrr55的博客 635

串口接收数据并对数据进行处理

正点原子的串口中断函数如下: void USART1_IRQHandler(void) //串口1中断服务程序 { u8 Res; #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS. OSIntEnter(); #endif if(USART_G...

位文杰的博客 2万+

全国充电站分布数据

CnOpenData推出的充电站数据覆盖全国34个省份的3万条数据,包含充电站名称、省份名称、省份代码、商圈、经纬度等地理信息以及商业类型、评分、消费等衍生信息,能为城市规划、环境科学、市场分析、技术发展和社会经济研究等多个领域提供宝贵的数据支持。

Sunny9qx的博客 4030

【目标检测】基于yolov5的水下垃圾检测(附代码和数据集,7684张图片)

【目标检测】基于yolov5的水下垃圾检测(附代码和数据集)

学无止境、积少成多、厚积薄发 4183

C#解决串口通信中接收数据时延迟处理与缓存处理的方法

C#解决串口通信中接收数据时延迟处理与缓存处理的方法 时间:2011-1-21 14:04:29 来源:www.cnblogs.com 作者:杨少宁  - - 利用串口进行通信,当发送方(A)将数据写入串口后,通过无线或有线方式将数据传送给接收方(B),B通过调用串口读方法comm.read(参数)即可将数据读出。原理十分简单,但最近在利用串口处理SM-42无线传输时,数据总是一段一段的传

wxf801的博客 3630

RK3568平台开发系列讲解(DMA篇)DMA engine使用

DMA传输属于异步传输,在启动传输之前,slave driver需要将此次传输的一些信息(例如src/dst的buffer、传输的方向等)提交给dma engine(本质上是dma controller driver),dma engine确认okay后,返回一个描述符(由struct dma_async_tx_descriptor抽象)。DMA_PREP_PQ_DISABLE_P、DMA_PREP_PQ_DISABLE_Q、DMA_PREP_CONTINUE,PQ有关的操作,TODO。

内核笔记 1723

C#串口接收数据如何做到完整,不丢字节包,串口超时处理

做串口通讯时,有时候接收会导致数据中断,所以自己写了一个超时

weixin_47124634的博客 2085

SAP UI5 OData V4 操作结果访问:从 getObject 到返回值上下文与 $$inheritExpandSelect

SAP UI5 OData V4 操作结果获取指南 摘要:在 SAP UI5 OData V4 模型中,操作结果需通过绑定上下文获取而非直接从 invoke() 返回。本文详解核心要点: 数据获取路径 使用 invoke() 发起请求后,通过 getBoundContext().getObject() 获取结果 特定场景下 invoke() 可能返回返回值上下文(如草稿切换) 关键实践技巧 使用 $$inheritExpandSelect 继承字段选择,避免二次读取 对象页应用中,通过替换绑定上下文实现无缝

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 314

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

php接收rs485的数据如何处理,串口发送与接收数据

使用RS-485串口进行通讯。1.定义串口接收数据的缓冲区,最大可以保存64个字节u8 RS485_RX_BUF1[64];2.定义接收发送数据的长度 u8 RS485_RX_CNT;3.发送数据的函数一般有两个printf和 USART_SendData,这里主要说USART_SendData的使用。printf实现的是格式化字符串,字符串比较有优势。USART_SendData传递单个字符和指...

weixin_36081677的博客 2540

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

串口接收数据的处理方法

我们这里提供的是单字节的处理,无论是读还是写,都是一次处理一个字节的数据。

IFLY513的博客 1556

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

串口接收数据超时,进行丢包处理

摘要:为解决串口通信中数据中断导致的缓存混乱问题,提出基于波特率的定时清除机制。在USART2中断服务程序中,每次接收数据时重置定时器计数器,若未在预定时间内收到完整数据包(通过定时器溢出中断判断),则强制标记接收完成并清除缓存。该方案通过TIM5定时器实现超时检测,当达到预设时间仍未接收完整数据时,自动触发处理机制,确保缓存区及时清空以准备接收下一帧数据。

qq_38295600的博客 3233

c#串口缓存字节数_串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)

串口通信中接收数据时延迟处理与缓存处理的解决方案(C#)利用串口进行通信,当发送方(A)将数据写入串口后,通过无线或有线方式将数据传送给接收方(B),B通过调用串口读方法comm.read(参数)即可将数据读出。原理十分简单,但最近在利用串口处理SM-42无线传输时,数据总是一段一段的传到B,并不能在comm_DataReceived方法中单纯使用read方法将数据接收完全。我知道用缓存机制,但由...

weixin_30686891的博客 1085
上一篇: web service中文资料合集
下一篇: Excel操作类
KEecho
博客等级 码龄15年 2粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值