目录

1.前言

2.windows  串口通信API

3.C/C++封装  动态运行库

4.JAVA-JNI  java程序调用C++程序

一、前言

&ensp ;写这个博客主要是因为自己想用java写一个小小的后端服务器,其中要处理由51单片机传送来的一些数据。单片机的数据由USB转串口发送至上位机,要处理这些数据,就会用到windows提供一些API(Application Programming Interface,应用程序接口)。java在安装了相关的包后,比如JNative.jar,可以直接用该包提供的接口来进行调用windowsAPI。但是我才接触java。而且整个作业,我仅仅只要一部分来处理这个数据。安装一个java包,实在是大可不必,所以就用C/C++来写一个的终端,封装一下放在java程序里面。

二、windows串口通信API

2.1   工具:VC++6.0

2.2   概述:windows操作系统的设备无关性将所有的外设都当做文件来操作,那么我们写串口通信就直接将串口当做文件来读写。那么我们打开串口后一定要记得关闭,这个很重要

2.3   串口通信程序概述

2.3.1 打开/关闭串口

HANDLE WINAPI CreateFileW(

LPCWSTR lpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode, //共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //安全属性

DWORD dwCreationDisposition, //指定文件的动作

DWORD dwFlagsAndAttributes, //文件属性---不指定就默认为同步IO

HANDLE hTemplateFile //模板文件

);

BOOL WINAPI CloseHandle(

HANDLE hObject

);

返回值:一个串口的句柄。

参数解释:

lpFileName——串口名字。 当为COM1~COM9的时候可以直接写入但是大于10会有另外的写法。以COM10为例:\.\COM10。

lpFileName——打开方式。 简单来说这个就是打开文件是读还是写。GENERIC_READ(读)|GENERIC_WRITE(写)。还有其它的两个值,详细请在编辑器中直接按下F12看看他们的定义。

如果我们要定义一个同步IO的话,我们的打开方式必须要有读动作。

dwShareMode指定该端口的共享属性。 对于不能共享的串口,它必须设置为0。这就是文件与通信设备之间的主要差异之一。如果在当前的应用程序调用CreateFile()时,另一个应用程序已经打开了串口,该函数就会返回错误代码,原因是两个应用程序不能共享一个端口。然而,同一个应用程序的多个线程可以共享由CreateFile()返回的端口句柄,并且根据安全性属性设置,该句柄可以被打开端口的应用程序的子程序所继承。

dwCreationDisposition指定文件的动作。 指定如果CreateFile()正在被已有的文件调用时应采取的动作。因为串口总是存在,fdwCreate必须设置成OPEN_EXISTING。该标志告诉Windows不用企图创建新端口,而是打开已经存在的端口。

调用该函数后,如果没有穿件成功将会返回INVALID_HANDLE_VALUE。

2.3.2 配置串口通信

(1) 当我们设置同步IO通信的时候,需要设置一下通信超时。一般情况下,我们用GetCommTimeouts来获得COMMTIMEOUTS结构体,再利用SetCommTimeouts来写入。

BOOL WINAPI GetCommTimeouts(

HANDLE hFile,

LPCOMMTIMEOUTS lpCommTimeouts

);

BOOL WINAPI SetCommTimeouts(

HANDLE hFile,

LPCOMMTIMEOUTS lpCommTimeouts

);

COMMTIMEOUTS:

typedef struct _COMMTIMEOUTS {

DWORD ReadIntervalTimeout; /* 设置两个字符之前的最大读取时间 */

DWORD ReadTotalTimeoutMultiplier; /* 设置每个字符的读取时间 */

DWORD ReadTotalTimeoutConstant; /* 设置所有字符读取的最大时间 */

DWORD WriteTotalTimeoutMultiplier; /* 设置每个字符的写入时间 */

DWORD WriteTotalTimeoutConstant; /* 设置所有字符的写入时间 */

} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

(2) 设置波特率等相关参数

仍然先用GetCommState得到DCB结构,修改其中的某些参数后再用SetCommState写入DCB结构。

BOOL WINAPI GetCommState(

HANDLE hFile,

LPDCB lpDCB

);

BOOL WINAPI SetCommState(

HANDLE hFile,

LPDCB lpDCB

);

DCB数据结构我们初级学者需要关注:波特率、校验位、停止位、发送数据位数。

(3) 设置缓冲区大小,根据程序要接收/发送的数据大小来决定。

BOOL WINAPI SetupComm(

HANDLE hFile,

DWORD dwInQueue,

DWORD dwOutQueue

);

(4) 读取/写入数据

BOOL WINAPI ReadFile(

HANDLE hFile,

LPVOID lpBuffer, //存放数据的缓冲区

DWORD nNumberOfBytesToRead, //一次想要读入的数据长度

LPDWORD lpNumberOfBytesRead, //实际读入的数据长度

LPOVERLAPPED lpOverlapped

);

BOOL WINAPI WriteFile(

HANDLE hFile,

LPCVOID lpBuffer,

DWORD nNumberOfBytesToWrite,

LPDWORD lpNumberOfBytesWritten,

LPOVERLAPPED lpOverlapped

);

2.3.3 配置串口通信

java调用c 串口_基于C语言的java串口通信程序相关推荐

  1. java医院挂号代码_基于SSM开发的Java医院预约挂号系统 源码下载

    这是一个基于SSM开发的Java医院预约挂号系统,源码中附带主工程以及数据库文件. 目前已知Bug:因为时间预约信息是假数据,控制预约日历显示的代码在data/index.js,因为js写的有点bug ...

  2. java实现医嘱管理系统_基于SSM框架的JAVA医嘱管理系统

    今天将为大家分析一个医嘱管理系统(随着科学技术的进步,医院规模的不断壮大,计算机在我院的应用已相当广泛,它既能提高工作效率,又能实现信息共享.我院使用医嘱管理系统后,实现了医嘱处理计算机化,医嘱处理方 ...

  3. java分布式调度框架_基于Redis的分布式Java任务执行和调度框架

    Redisson是使用Redis实现分布式任务执行和调度的Java开源项目,它是通过标准JDK的ExecutorService和ScheduledExecutorService API实现的,被提交的 ...

  4. Java 调用http接口(基于OkHttp的Http工具类方法示例)

    目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...

  5. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  6. c语言编写订货系统,学位论文_基于c语言的仓库订货系统的仿真.doc

    学位论文_基于c语言的仓库订货系统的仿真 本科毕业论文(设计.创作) 题目: 基于C语言的仓库订货系统的仿真 学生姓名: 学号: 所在系院: 信息与通信技术系 专业: 电子信息工程 入学时间: 201 ...

  7. TIA博途_基于SCL语言制作模拟量输入输出全局库的具体方法

    TIA博途_基于SCL语言制作模拟量输入输出全局库的具体方法 一. 模拟量输入块:创建FB,定义块的接口,如下图所示: 程序中包含了高报警,低报警,一般上位机报警需要这个变量. 极性选择,适合更广的应 ...

  8. Java调用Python:实现两大语言的无缝对接

    Java调用Python:实现两大语言的无缝对接 Java和Python是两种非常流行的编程语言,它们的应用场景各有不同.但是,在某些情况下,我们需要在Java中使用Python,这时候就需要实现两者 ...

  9. 图像haar特征提取 c语言,基于C语言的特征点提取程序 本程序是利用C语言对各种信号数据的特征点提取程序 - 下载 - 搜珍网...

    基于C语言的特征点提取程序\修改后 特征点提取程序\提取特征点\Debug\football.ilk 基于C语言的特征点提取程序\修改后 特征点提取程序\提取特征点\Debug\football.ob ...

最新文章

  1. R语言ggplot2可视化使用vjust和hjust参数对齐图像中的文本注释信息(左对齐、右对齐、居中)实战
  2. 基于ESP32模块利用检测线圈检测车模停止时间,室内视觉AI裁判系统
  3. CSS实现各类分栏布局
  4. Centos7.1 命令行与图形化界面登陆
  5. drbd heartbeat mysql_Heartbeat+DRBD+MySQL Replication故障处理
  6. mysql 精度_mysql-笔记 精度
  7. [APIO2013]机器人(DP+SPFA最短路)
  8. 第三课 SVM(2)
  9. 我的三年研究生(CS)学习与工作经历(ZT)
  10. 2018年最新Spring Boot视频教程附代码笔记资料(50G)
  11. 【OpenCV】图片对比度和亮度
  12. numpy.random 模块中文文档学习笔记
  13. SpringBoot作mongodb批量更新
  14. 猜数字的算法的一个简单实现
  15. 汉字乱码的终极解决方案
  16. linux 开根号函数,Linux里隐藏的计算器开根号,问他它的地球未解之谜吗?
  17. Pandas(数据分析处理库)---讲解
  18. 声学感知刻度(mel scale、Bark scale、ERB)与声学特征提取(MFCC、BFCC、GFCC)
  19. 委托(C# 编程指南)
  20. vue利用事件委托实现按钮互斥,并传递对应的值

热门文章

  1. C#基础笔记(第十九天)
  2. python实现按帧数裁剪视频
  3. promise 以及经典面试题
  4. 硬盘坏了数据可以恢复吗?盘点数据恢复技巧
  5. 微信社群机器人Java,做社群一定需要用到微信群机器人吗?看这里你就懂了!...
  6. java pdf水印排布问题_java实现图片和pdf添加铺满文字水印
  7. cocos2d js-3.2 PageView的简单使用
  8. 项目沟通管理干系人管理
  9. 薄冰-英语语法[2]-冠词的知识点 (易混知识)
  10. 【深度学习笔记】自建交通标志分类数据集转换为MNIST数据格式