用C语言实现串口通讯程序

2023-05-16

1. 首先安装虚拟串口vspd软件,用于创建虚拟串口进行互联调试

2.打开vspd软件,选择COM1和COM4,点击Add pair,把COM1和COM4互联

3.打开虚拟串口助手,设置串口号为COM1,波特率为19200,其他设置使用默认值,点击连接

4.用C语言编写串口调试代码,使用COM4




  

typedef struct {
 HANDLE hCom;
 uint32_t baudrate;
 uint32_t bytesize;
 char parity;
 uint32_t stopbit;
}rs232_device;  

int set_opt(HANDLE hFile, int nSpeed, int nBits, char nEvent, int nStop)
{
 DCB dcb;
 COMMTIMEOUTS timeouts;  

//set input buf and output buf
 SetupComm(hFile, 512, 512);  

//set read timeout
 timeouts.ReadIntervalTimeout = 1000;
 timeouts.ReadTotalTimeoutMultiplier = 500;
 timeouts.ReadTotalTimeoutConstant = 5000;
//set write timeout
 timeouts.WriteTotalTimeoutMultiplier = 0;
 timeouts.WriteTotalTimeoutConstant = 2000;
 SetCommTimeouts(hFile, &timeouts);  

//store current setting
    if (0 == GetCommState(hFile, &dcb)){
        return -1;
    }  

//set BaudRate
 switch(nSpeed){
  case 2400:
   dcb.BaudRate = CBR_2400;
   break;
  case 4800:
   dcb.BaudRate = CBR_4800;
   break;
  case 115200:
   dcb.BaudRate = CBR_115200;
   break;
  default:
   dcb.BaudRate = CBR_9600;
   break;
 }  

//set ByteSize
 switch(nBits){
  case 7:
   dcb.ByteSize = 7;
   break;
  case 8:
   dcb.ByteSize = 8;
   break;
  default:
   dcb.ByteSize = 8;
   break;
 }  

//set Parity
 switch(nEvent){
  case 'N':
   dcb.Parity = NOPARITY;
   break;
  case 'O':
   dcb.Parity = ODDPARITY;
   break;
  case 'E':
   dcb.Parity = EVENPARITY;
   break;
 }  

//set StopBit
 switch(nStop){
  case 1:
   dcb.StopBits = ONESTOPBIT;
   break;
  case 2:
   dcb.StopBits = TWOSTOPBITS;
   break;
 }  

 if(0 == SetCommState(hFile, &dcb)){
  return -1;
 }  

    return 0;
}  

 rs232_device rs232_dev;
 rs232_dev.baudrate = 119200;
 rs232_dev.bytesize = 8;
 rs232_dev.parity = 'N'; 
 rs232_dev.stopbit = 1;
 //打开串口4
 rs232_dev.hCom = CreateFile("COM4",GENERIC_READ |GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL);
 if (rs232_dev.hCom !=INVALID_HANDLE_VALUE){
  printf("Open COM4 OK!\n");
 }else 
  printf("Open COM4 Fail!\n");
 //通讯设置
 if(-1 == set_opt(rs232_dev.hCom,
     rs232_dev.baudrate,
     rs232_dev.bytesize,
     rs232_dev.parity,
     rs232_dev.stopbit))
 {
  if(INVALID_HANDLE_VALUE != rs232_dev.hCom)
   CloseHandle(rs232_dev.hCom); 
 }  

 unsigned char readBuf[1024] = {0};
 char writeBuf[1024] = "Hello Ketty!";
 int count = 100;
 DWORD readsize = 0;
 DWORD writesize = 0;
 int i;
 while(1){
  if(INVALID_HANDLE_VALUE != rs232_dev.hCom){
   printf("Start Read!\n");
   //串口读操作
   ReadFile(rs232_dev.hCom, readBuf, count, &readsize, NULL);
   printf("Read Buf=");
   for(i=0;i<readsize;i++)
    printf("%x ", readBuf[i]);
   printf("\n");
  }  

  //串口写操作
  WriteFile(rs232_dev.hCom, writeBuf, count, &writesize, NULL);
 }  

  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用C语言实现串口通讯程序 的相关文章

  • Dubbo超时和重连机制

    dubbo启动时默认有重试机制和超时机制 超时机制的规则是如果在一定的时间内 xff0c provider没有返回 xff0c 则认为本次调用失败 xff0c 重试机制在出现调用失败时 xff0c 会再次调用 如果在配置的调用次数内都失败
  • Sharding-JDBC简介

    一般 xff0c 线上系统的业务量不是很大 xff0c 比如说单库的数据量在百万级别以下 xff0c 那么MySQL的单库即可完成任何增 删 改 查的业务操作 随着业务的发展 xff0c 单个DB中保存的数据量 xff08 用户 订单 计费
  • 1024

    听说今天发帖能有1024勋章 xff1f
  • 神奇!明明是 socket,被我玩成了 http!

    颓废青年 xff0c 快出来挨打 xff01 点击上方 Java极客技术 xff0c 选择 设为星标 后台回复 java xff0c 获取Java知识体系 面试必看资料 资料会持续更新 xff0c 已更新第四次 xff01 文章精品专栏 记
  • python画图程序

    usr bin python coding utf 8 import wx import wx lib buttons as buttons import wx adv as adv import wx lib colourselect a
  • 升级到tensorflow2.0,我整个人都不好了

    版本升级到 tensorflow 2 0 的悲惨经历 没事别升级 Tensorflow 2 0发布已经有一段时间了 xff0c 各种基于新API的教程看上去的确简单易用 xff0c 一个简单的mnist手写识别只需要下面不到20行代码就OK
  • 修改conda环境和缓存默认路径

    默认情况下 xff0c conda 创建的新环境 以及过往安装的模块缓存都存储在用户目录下 xff0c 这一点不会在 conda xff08 user specific xff09 配置文件 HOME condarc 中体现出来 xff0c
  • 融合人体姿态估计和目标检测的学生课堂行为识别

    融合人体姿态估计和目标检测的学生课堂行为识别 参考网 摘要 xff1a 在課堂教学中 xff0c 人工智能技术可以帮助实现学生行为分析自动化 xff0c 让教师能够高效且直观地掌握学生学习行为投入的情况 xff0c 为后续优化教学设计与实施
  • Python实例详解pdfplumber读取PDF写入Excel

    一 Python操作PDF 13大库对比 PDF xff08 Portable Document Format xff09 是一种便携文档格式 xff0c 便于跨操作系统传播文档 PDF文档遵循标准格式 xff0c 因此存在很多可以操作PD
  • 如何使用ChatGPT API训练自定义知识库AI聊天机器人

    原文 xff1a 如何使用ChatGPT API训练自定义知识库AI聊天机器人 闪电博 在我们之前的文章中 xff0c 我们演示了如何用ChatGPT API建立一个AI聊天机器人 xff0c 并指定一个角色来进行个性化处理 但如果你想在自
  • 哈工大团队开源医学智能问诊大模型 | 华佗: 基于中文医学知识的LLaMa指令微调模型

    原文 xff1a CVHub 门头沟学院AI视觉实验室御用公众号 学术 科研 就业 185篇原创内容 公众号 Title HuaTuo Tuning LLaMA Model with Chinese Medical Knowledge PD
  • 开源数字人Fay

    原文 xff1a 别再因AI焦虑 xff0c 这波年轻人已经用 中国版ChatGPT 创业成功了 数字人 AI 创业 新浪新闻 开源 xff1a GitHub TheRamU Fay Fay是一个完整的开源项目 xff0c 包含Fay控制器
  • 推荐 3 个令你惊艳的 GitHub 项目

    原文 xff1a 推荐 3 个令你惊艳的 GitHub 项目 昨日 GitHub Trending 上榜的开源项目 xff0c 基于 AI 技术提高你的生产力 借助 AI 你能搭建自己的数字人 搭建自己的法律助手 文档分析助手 本期推荐开源
  • AI 数字人制作(方案一):输入一张图片和一段文字即可生成数字人

    方案一 xff1a 原文 xff1a AI 数字人制作 xff08 方案一 xff09 哔哩哔哩 bilibili AI 文字和图片生成数字人 输入一张图片和一段文字即可生成数字人 用三个开源项目整合成可以商用的数字人项目 文本生成语音开源
  • 大量数据情况下单线程插入和多线程insert数据库的性能测试

    大量数据情况下单线程插入和多线程insert数据库的性能测试 之前一直没有遇到过大批量数据入库的场景 xff0c 所以一直没有思考过在大量数据的情况下单线程插入和多线程插入的性能情况 今天在看一个项目源代码的时候发现使用了多线程insert
  • 查看tensorflow 安装目录

    使用命令 xff1a pip show f tensorflow 图和张量源码 xff1a C Program Files Anaconda3 Lib site packages tensorflow python framework op
  • FP-growth算法,fpgrowth算法详解

    FP growth算法 xff0c fpgrowth算法详解 使用FP growth算法来高效发现频繁项集 前言 你用过搜索引擎挥发现这样一个功能 xff1a 输入一个单词或者单词的一部分 xff0c 搜索引擎酒会自动补全查询词项 xff0
  • 如何将一个矩阵化为行阶梯形矩阵

    2016 03 29 尾巴 线性代数 有同学反映上一课过于冷冰冰 xff0c 都是一些不带证明的公式 如果线性代数所有公式都要证明的话 xff0c 线性代数的难度会上好几个量级 xff0c 有的公式的证明是特别特别难的 还有一个 xff0c
  • Activity启动模式与任务栈(Task)全面深入记录(上)

    转载请注明出处 xff08 谢谢 xff09 xff1a http blog csdn net javazejian article details 52071885 任务栈简单入门 最近又把两本进阶书看了一遍 xff0c 但总感觉好记性不

随机推荐