最简单的c 语言打开串口程序,一个简单的串口程序
····从2015年到现在,将近4年没有写程序了,这次是一个朋友要我做物联网的项目,要学习一些新东西,做起来再说。
····基于STM32的通讯调试起来还是不方便,用C#写了一个简单的收发程序,先模拟链式收发,主要是测试流程是否正常无误。后面用C写好这部分处理程序再下载到单片机上就OK了,可能是刚开始接触STM32的单片机不习惯,还是觉得这样省事。
····在用C#写的时候,发现关闭端口出现死机现象,到网上百度也没有找到好的处理办法,最终还是用委托注销的方式解决了。
····主要代码:
private void sp_DataReceived(object sender,SerialDataReceivedEventArgs e)
{
System.Threading.Thread.Sleep(500);//延时500ms等待接收完数据
Application.DoEvents();
this.BeginInvoke((EventHandler)(delegate
{
if (IsOpen)
{
textBox2.Text += "\r\n新接收到的数据:"+Convert.ToString(DateTime.Now);
if (IsFormatHex == false)
{
byte[] ReceiveData = new byte[sp.BytesToRead];//创建接收字节数组
sp.Read(ReceiveData, 0, ReceiveData.Length);//读取接收到的数据
receiveDatas.Clear();
receiveDatas.AddRange(ReceiveData);
textBox2.Text += Encoding.Default.GetString(receiveDatas.ToArray());
//textBox2.Text += sp.ReadLine().ToString();
//存入本地数据库
FFDWTable SaveFFDW = new FFDWTable();
SaveFFDW.sCommType = "WS";
SaveFFDW.sCommPara = "命令参数";
SaveFFDW.sSend = "01";
SaveFFDW.dtSendTime = DateTime.Now;
SaveFFDW.sRece = "02";
SaveFFDW.sData = Encoding.Default.GetString(receiveDatas.ToArray());
//SaveData(SaveFFDW);
}
else
{
Byte[] ReceivedData = new Byte[sp.BytesToRead];//创建接收字节数组
sp.Read(ReceivedData, 0, ReceivedData.Length);//读取接收的数据
String ReceDataText = null;
for (int i = 0; i < ReceivedData.Length - 1; i++)
{
ReceDataText += ("0x" + ReceivedData[i].ToString("X2" + " "));
}
textBox2.Text += ReceDataText;
}
sp.DiscardInBuffer();//丢弃接收缓冲区数据
}
}));
}
····上面是接收事件,主要处理接收到的数据。
····在打开串口设置属性的时候,要注册事件:
//定义DataReceived事件,当串口收到数据后触发事件
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
····在关闭串口的时候,避免死机的方法:
try
{
// 消除委托
if (IsOpen == false)
{
sp.DataReceived -= sp_DataReceived;
}
sp.Close();
IsSetProperty = false;
btOpenComPort.Text = "打开串口";
CBCommPort.Enabled = true;
CBBaudRate.Enabled = true;
CBDataBit.Enabled = true;
CBParitv.Enabled = true;
CBStopBit.Enabled = true;
rbChar.Enabled = true;
rbHex.Enabled = true;
}
catch (Exception)
{
MessageBox.Show("关闭串口时发生错误!", "错误提示");
}
经过试验,如果是BeginInvoke则不会死机,换成Invoke则死机,在网上查了资料,原来BeginInvoke是采用异步方式来处理里面的委托,而Invoke采用的是同步方式,它在处理完事务期间对其他消息有阻塞,所以造成了死机。
最简单的c 语言打开串口程序,一个简单的串口程序相关推荐
- java 语言 写字板_一个简单的java语言写字板.docx
一个简单的java语言写字板.docx 一个简单的JAVA语言写字板一.需求分析1.需求分析:现在网络上各种文档编辑器数不胜数.功能也是应有尽有,有能改变字体的,有可以改变字体颜色的,但是,这些软件有 ...
- c语言编程坦克图案,用C语言的图像函数画一个简单的坦克图样
用C语言的图像函数画一个简单的坦克图样 #include "graphics.h" #include "conio.h" void Tanke(int x,in ...
- 用C语言或C++编写一个简单的银行家算法模拟程序
1.问题描述 银行家算法是操作系统中避免死锁的典型算法.用C语言或C++编写一个简单的银行家算法模拟程序,实现多个进程争用系统临界资源时的分配过程.要求程序实现: 1.当一进程请求一组资源时,先确定是 ...
- 函数式编程中的战斗机(二) --运用elm语言MUV设计模式做一个简单的应用实例
@函数式编程中的战斗机(二) -运用elm语言MUV设计模式做一个简单的应用实例 1 elm语言设计模式的特点 1.1 面向对象设计模式的特点 每种编程语言都有其独特的语法和优缺点,从而导致与众不同的 ...
- java简单编译器源代码_25行代码实现一个简单的编译器
起因 <25行JavaScript语句实现一个简单的编译器>实现的是一个简单到不能再简单的玩具的玩具,他的魔法是函数式编程简化了js代码.java 8提供了函数式编程的支持,昨晚脑子抽风突 ...
- C 语言进阶:造一个简单的浏览器
前言 本教程将通过一个简单的仿浏览器界面的程序,向你介绍关于构建图形界面程序的基础知识,掌握这些知识后,你将会对图形界面开发有更加深刻的理解. 你可以提前预览我们要写的程序的最终效果,它的源代码已经上 ...
- C语言游戏脚本:一个简单的内存脚本!
通过 C 语言编写一个简单的外挂,通过 API 函数修改游戏数据,从而实现作弊功能 ● 对象分析 ● 要用的 API 函数简单介绍 ● 编写测试效果 ● 总体评价 对象分析 本次游戏对象为 Super ...
- c 语言 验证码识别算法,一个简单的文件传输验证码识别c/s实现
一个简单的文件传输验证码识别c/s实现 大体思路 client通过tcp向server传输一个待识别的验证图片,server端识别后通过tcp回传给client. server端识别验证码采用pyte ...
- 编写简单php表单,用PHP做一个简单的表单
PHP最有用的特性之一是它能够自动将表单中的变量值赋予PHP变量.这使得表单处理变得非常快捷. 因此,假如你送出一个内含输入栏位值的表单如下: 当你用PHP处理此页面,$name变量的值就会是 Gle ...
- 4、python简单线性回归代码案例(完整)_python 实现一个简单的线性回归案例
#!/usr/bin/env python # -*- coding: utf-8 -*- # @File : 自实现一个线性回归.py # @Author: 赵路仓 # @Date : 2020/4 ...
最新文章
- Linux系统自动更新时间
- 《敏捷迭代开发:管理者指南》—第2章2.9节增量交付
- codeblocks如何导入项目_T3如何利用系统工具导入导出复制存货档案
- c# 之继承、封装、多态
- DevOps组织如何有效地实施MSA
- python做数据分析需要oracle_精通 Oracle+Python,第 1 部分:查询最佳应践
- Ajax与jQuery、json
- c语言必背100代码,初学者代码大全(c语言必背100代码)
- vue项目中使用 ttf字体
- Linux ——vi / vim 新建文件vi abc.txt 、编辑文件 i、退出编辑 esc、保存文件:wq、打开文件所在目录 open . 、使用命令打开文件 open ./abc.txt。
- 开根号的笔算算法图解_开根号手算方法
- java 原子量_Java多线程-新特征-原子量
- 使用vue-ui可视化管理工具来创建项目并安装vue-cli-plugin-element插件
- python中abs函数是什么意思_python abs函数怎么用
- Android发展历程
- BCD码-8421码、5421码、2421码、余3码
- 2021-2027全球及中国边缘计算网关行业研究及十四五规划分析报告
- (转)洞房花烛夜新郎坦言不爱新娘 新娘立马回娘家
- The Python IDE for Professional Developers - PyCharm 安装
- 论文阅读《Multi-view Multi-behavior Contrastive Learning in Recommendation》
热门文章
- fiddler注释_fiddler下载_fiddler中文版下载「抓包工具」-太平洋下载中心
- 点云:python版本的点云数据处理库
- ILSpy的下载与使用
- pdf打印机安装程序_Adobe Acrobat DC安装以及PDF打印机安装教程
- 学生用计算机怎么玩俄罗斯方块,回忆小霸王童年 如何在电脑上玩俄罗斯方块环游记...
- 组态王 力控 MCGS 瑞尔 杰控等国内组态软件一点看法
- 22计算机408考研—数据结构—图
- json转换为对象 java对象数组对象_将json数组转换为java列表对象
- Altium Designer 元件封装库与3D模型大全
- Java 实现中文汉字转拼音