学习单片机或者嵌入式编程常常要用到超级终端–串口调试助手,但有时需要我们自己做一个终端,用来当上位机。最近课设要求我们自己写个终端来处理串口信息,于是乎,接触了一些windows的串口API,做出了一个简单的串口调试助手,很简陋~

Windows把串口当作文件处理,这点很重要!

使用串口的基本流程:
1、得到串口的句柄,句柄可以看作一个指针或者是一个实例
2、配置串口,比如收发超时时间、波特率,奇偶校验
3、读写串口

一、得到串口句柄

使用CreateFile 函数,有8个参数。
不懂这些函数的使用点这个链接,可以节省你的时间

上面这个链接非常非常重要,是一个大佬的博客

//打开串口  CreateFile函数 hCom = CreateFile("COM3",GENERIC_READ |GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL);if (hCom !=INVALID_HANDLE_VALUE){printf("串口打开成功!\n");}else { printf("串口打开失败!\n");}

二、配置串口

1、设置读写超时等待时间
使用SetCommTimeouts 函数,2个参数。

 COMMTIMEOUTS timeouts;  //windows.h头文件设置的一种变量类型
//读超时 timeouts.ReadIntervalTimeout = 1000;     //读操作时两个字符间的间隔超时timeouts.ReadTotalTimeoutMultiplier = 500; //读操作在读取每个字符时的超时timeouts.ReadTotalTimeoutConstant = 5000;  //读操作的固定超时//写超时 timeouts.WriteTotalTimeoutMultiplier = 0;  //写操作在写每个字符时的超时timeouts.WriteTotalTimeoutConstant = 2000;  //写操作的固定超时SetCommTimeouts(hCom,&timeouts);

2、设置输入输出缓存区大小
使用SetupComm函数,2个参数。

//设置输入输出缓冲区大小SetupComm(hCom,500,500);

3、设置串口波特率、数据位、奇偶校验等属性
使用GetCommState、SetCommState 函数,都是2个参数。

 DCB dcb; //库里的一种数据结构类型if (GetCommState(hCom, &dcb) == 0){return -1;}dcb.BaudRate = CBR_115200;   //波特率在这修改,值格式:CBR_+数值dcb.ByteSize = 8;          //数据位数 dcb.Parity = NOPARITY;      //校验位 dcb.StopBits = ONESTOPBIT;   //停止位 if(SetCommState(hCom,&dcb) == 0){return -1;}

三、读写串口数据

使用ReadFile、WriteFile 函数,都是5个参数。

     int i;int count = 20;//函数要用的众多参数char rbuf[501] = {0},wbuf[501] = {0};DWORD rsize = 0,wsize = 0;ReadFile(hCom,rbuf,count,&rsize,NULL);//printf("数据值:");for(i = 0;i < rsize;i++){printf("%c",rbuf[i]);}printf("\n");//WriteFile(rs232_dev.hCom, writeBuf, count, &wsize, NULL);//写数据操作类比读数据

总代码,直接粘贴就能用

串口设置:
波特率:115200
数据位:8
校验位:None
停止位:1
流控:无

#include<stdio.h>
#include<windows.h>//*设置超时  GetCommTimeouts/SetCommTimeouts
//*设置缓冲区大小  SetupComm()
//* 设置串口配置信息  GetCommState()和SetCommState()
int setUart(HANDLE hCom)
{COMMTIMEOUTS timeouts;DCB dcb;//读超时 timeouts.ReadIntervalTimeout = 1000;      //读操作时两个字符间的间隔超时timeouts.ReadTotalTimeoutMultiplier = 500; //读操作在读取每个字符时的超时timeouts.ReadTotalTimeoutConstant = 5000;  //读操作的固定超时//写超时 timeouts.WriteTotalTimeoutMultiplier = 0;  //写操作在写每个字符时的超时timeouts.WriteTotalTimeoutConstant = 2000;  //写操作的固定超时SetCommTimeouts(hCom,&timeouts);//设置输入输出缓冲区大小SetupComm(hCom,500,500);//设置串口参数,如波特率 if (GetCommState(hCom, &dcb) == 0){return -1;}dcb.BaudRate = CBR_115200; //波特率 dcb.ByteSize = 8;            //数据位数 dcb.Parity = NOPARITY;      //校验位 dcb.StopBits = ONESTOPBIT;   //停止位 if(SetCommState(hCom,&dcb) == 0){return -1;}return 0;}
int main()
{int i;HANDLE hCom;int count = 20;char rbuf[501] = {0},wbuf[501] = {0};DWORD rsize = 0,wsize = 0;//打开串口  CreateFile函数 hCom = CreateFile("COM3",GENERIC_READ |GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL);if (hCom !=INVALID_HANDLE_VALUE){printf("串口打开成功!\n");}else { printf("串口打开失败!\n");} //配置串口 if(setUart(hCom) == -1){if(INVALID_HANDLE_VALUE != hCom)CloseHandle(hCom);   //关闭串口 } //读写串口 printf("开始读取串口数据\n");while(1){if(INVALID_HANDLE_VALUE != hCom){ReadFile(hCom,rbuf,count,&rsize,NULL);//printf("数据值:");for(i = 0;i < rsize;i++){printf("%c",rbuf[i]);}printf("\n");} //WriteFile(hCom, wbuf, count, &wsize, NULL);} return 0;}

运行结果(连接的硬件是CC2530):

C语言写个简单的串口调试助手相关推荐

  1. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

  2. 手把手教你写一个串口调试助手

    硬件攻城狮 2022-05-20 14:05 发表于广东 果果小师弟. 电子信息工程硕士在读,分享单片机.嵌入式linux.物联网等知识,致力于打造最硬核的嵌入式技术公众号. 摘要:前段时间发布了一个 ...

  3. 串口调试助手c语言程序,串口调试助手C语言源程序

    串口调试助手C语言源程序 串口调试助手源程序 及编程详细过程 作者:龚建伟 2001.6.20 可以任意转载,但必须注明作者和说明来自http://doc.xuehai.net,不得作为商用 目次: ...

  4. Visual Studio 2019 C# 上位机入门(2):写一个简单的串口助手

    前言 本文记录一下用Visual Studio 2019 C# 写一个简单的串口助手的过程,由于没有先从小处学习,而是直接找相关资料就开始做,免不了很多奇怪的问题花了一些时间,基于此情况,我将尽可能整 ...

  5. 从零开始,教你写一个串口调试助手

    摘要:相信很多小伙伴都没接触过QT,如果想用QT写一个调试助手,首先是要会一点C++语法.只要能看得懂C++的代码,就能很快的写一个串口调试助手. 下面先推荐两个视频教程,感兴趣的可以看一看! 1.B ...

  6. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  7. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  8. 自己写了一个串口调试助手

    五叶草串口调试助手(持续更新-) 最新版本v1.1.0.0 介绍 作为一个嵌入式开发者, 经常用到串口, 也经常因为串口调试助手而烦恼. 于是决定自己做一款串口调试助手. 修改日志 v1.1.0.0 ...

  9. 串口调试助手vc源程序及其详细编写过程

    目次: 1.建立项目   2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件   5.添加串口事件消息处理函数OnComm() 6.打 ...

最新文章

  1. python 保存json时最后一个多了一个逗号_从json obj的最后一个对象中删除逗号
  2. warning: implicit declaration of function ‘sleep’(添加头文件: #include <unistd.h>)
  3. SparkWeb 编译
  4. 胡浩:人人能学的AI《从零开始机器学习》苏州.NET俱乐部课程分享
  5. Kubernetes资源创建yml语法
  6. 小心DLL链接静态库时的内存错误
  7. 调试器工作原理--CPU软件断点/硬件断点/单步执行标识
  8. JS获取元素的第一个子节点
  9. Dev-C++下载与安装教程
  10. 矩阵分析_二阶矩阵A为酉矩阵的充分必要条件是A为下列三种形式之一
  11. 一句话说明java常量池及其存储的对象
  12. 速锐得车载以太网的信息性能优势硬件及应用研究
  13. 巨人肩膀上的迁移学习(2)---图像回归
  14. 宁王比神联手,率锂电池和材料厂,决战锂矿
  15. 手机怎么把照片转JPG格式?这两种方法可以迅速转换
  16. Android左右声道切换流程
  17. 完美卸载2011 绿色版软件下载 完美卸载官网
  18. 吸附去除溶液重金属离子工艺原理
  19. 我的2016--一半欢喜一半愁,生活总在起变化
  20. 智能汽车如何联接未来?岳麓峰会亮出“长沙梯度”

热门文章

  1. linux 启动 参数,Linux启动参数
  2. 中北大学算法分析与设计实验报告一(BF算法)
  3. 雷军:何以英雄背骂名!
  4. 大数据技术介绍:01大数据概述
  5. @Transactional 的使用
  6. 什么是中央银行数字货币 (CBDC)?为什么各国都喜欢它?
  7. Redis可视化管理工具:Another Redis DeskTop Manager
  8. 困扰的Byte、bit 、和16进制之间的关系
  9. linux下一键部署mysql_linux下一键编译搭建mysql服务器脚本
  10. 基于MK-MMD度量迁移学习的轴承故障诊断方法研究