····从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 语言打开串口程序,一个简单的串口程序相关推荐

  1. java 语言 写字板_一个简单的java语言写字板.docx

    一个简单的java语言写字板.docx 一个简单的JAVA语言写字板一.需求分析1.需求分析:现在网络上各种文档编辑器数不胜数.功能也是应有尽有,有能改变字体的,有可以改变字体颜色的,但是,这些软件有 ...

  2. c语言编程坦克图案,用C语言的图像函数画一个简单的坦克图样

    用C语言的图像函数画一个简单的坦克图样 #include "graphics.h" #include "conio.h" void Tanke(int x,in ...

  3. 用C语言或C++编写一个简单的银行家算法模拟程序

    1.问题描述 银行家算法是操作系统中避免死锁的典型算法.用C语言或C++编写一个简单的银行家算法模拟程序,实现多个进程争用系统临界资源时的分配过程.要求程序实现: 1.当一进程请求一组资源时,先确定是 ...

  4. 函数式编程中的战斗机(二) --运用elm语言MUV设计模式做一个简单的应用实例

    @函数式编程中的战斗机(二) -运用elm语言MUV设计模式做一个简单的应用实例 1 elm语言设计模式的特点 1.1 面向对象设计模式的特点 每种编程语言都有其独特的语法和优缺点,从而导致与众不同的 ...

  5. java简单编译器源代码_25行代码实现一个简单的编译器

    起因 <25行JavaScript语句实现一个简单的编译器>实现的是一个简单到不能再简单的玩具的玩具,他的魔法是函数式编程简化了js代码.java 8提供了函数式编程的支持,昨晚脑子抽风突 ...

  6. C 语言进阶:造一个简单的浏览器

    前言 本教程将通过一个简单的仿浏览器界面的程序,向你介绍关于构建图形界面程序的基础知识,掌握这些知识后,你将会对图形界面开发有更加深刻的理解. 你可以提前预览我们要写的程序的最终效果,它的源代码已经上 ...

  7. C语言游戏脚本:一个简单的内存脚本!

    通过 C 语言编写一个简单的外挂,通过 API 函数修改游戏数据,从而实现作弊功能 ● 对象分析 ● 要用的 API 函数简单介绍 ● 编写测试效果 ● 总体评价 对象分析 本次游戏对象为 Super ...

  8. c 语言 验证码识别算法,一个简单的文件传输验证码识别c/s实现

    一个简单的文件传输验证码识别c/s实现 大体思路 client通过tcp向server传输一个待识别的验证图片,server端识别后通过tcp回传给client. server端识别验证码采用pyte ...

  9. 编写简单php表单,用PHP做一个简单的表单

    PHP最有用的特性之一是它能够自动将表单中的变量值赋予PHP变量.这使得表单处理变得非常快捷. 因此,假如你送出一个内含输入栏位值的表单如下: 当你用PHP处理此页面,$name变量的值就会是 Gle ...

  10. 4、python简单线性回归代码案例(完整)_python 实现一个简单的线性回归案例

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @File : 自实现一个线性回归.py # @Author: 赵路仓 # @Date : 2020/4 ...

最新文章

  1. Linux系统自动更新时间
  2. 《敏捷迭代开发:管理者指南》—第2章2.9节增量交付
  3. codeblocks如何导入项目_T3如何利用系统工具导入导出复制存货档案
  4. c# 之继承、封装、多态
  5. DevOps组织如何有效地实施MSA
  6. python做数据分析需要oracle_精通 Oracle+Python,第 1 部分:查询最佳应践
  7. Ajax与jQuery、json
  8. c语言必背100代码,初学者代码大全(c语言必背100代码)
  9. vue项目中使用 ttf字体
  10. Linux ——vi / vim 新建文件vi abc.txt 、编辑文件 i、退出编辑 esc、保存文件:wq、打开文件所在目录 open . 、使用命令打开文件 open ./abc.txt。
  11. 开根号的笔算算法图解_开根号手算方法
  12. java 原子量_Java多线程-新特征-原子量
  13. 使用vue-ui可视化管理工具来创建项目并安装vue-cli-plugin-element插件
  14. python中abs函数是什么意思_python abs函数怎么用
  15. Android发展历程
  16. BCD码-8421码、5421码、2421码、余3码
  17. 2021-2027全球及中国边缘计算网关行业研究及十四五规划分析报告
  18. (转)洞房花烛夜新郎坦言不爱新娘 新娘立马回娘家
  19. The Python IDE for Professional Developers - PyCharm 安装
  20. 论文阅读《Multi-view Multi-behavior Contrastive Learning in Recommendation》

热门文章

  1. fiddler注释_fiddler下载_fiddler中文版下载「抓包工具」-太平洋下载中心
  2. 点云:python版本的点云数据处理库
  3. ILSpy的下载与使用
  4. pdf打印机安装程序_Adobe Acrobat DC安装以及PDF打印机安装教程
  5. 学生用计算机怎么玩俄罗斯方块,回忆小霸王童年 如何在电脑上玩俄罗斯方块环游记...
  6. 组态王 力控 MCGS 瑞尔 杰控等国内组态软件一点看法
  7. 22计算机408考研—数据结构—图
  8. json转换为对象 java对象数组对象_将json数组转换为java列表对象
  9. Altium Designer 元件封装库与3D模型大全
  10. Java 实现中文汉字转拼音