GO语言实现串口简单通讯

 更新时间:2025年11月30日 11:49:38   作者:吴秀华Cherry  
本文分享了使用Go语言进行串口通讯的实践过程,详细介绍了串口配置、数据发送与接收的代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

背景

最近再学习 go 语言,在某宝用5块钱买了个教学视频 8 日速成,目前看到了第3天的视频,进度龟速。。。。。这周末加油!
然后,学习 go 语言的目的是想用 go 做自动测试,我是只学过 C ,感觉 go 语言和 C 比较相近,学起来比较简单、迅速。

串口通讯代码

golang 串口源码:https://github.com/huin/goserial

对于 go 的串口通讯要求如下:

  1. Data Bits:8
  2. Stop Bits:1
  3. Parity:None
  4. Hardware Flow Control:None
  5. Software Flow Control:None

代码块分解解析

  1. 设置串口号和波特率
c := &serial.Config{Name: "COM5", Baud: 115200}

Config 是一个结构体。原型如下:

type Config struct {
	Name string
	Baud int

	Size     ByteSize
	Parity   ParityMode
	StopBits StopBits

	// RTSFlowControl bool
	// DTRFlowControl bool
	// XONFlowControl bool

	CRLFTranslate bool // Ignored on Windows.
	// TimeoutStuff int
}
  1. 打开串口
    OpenPort 函数用于打开串口。传参 c 是 Config 结构体的指针。返回结果有两个:s 和 err。s 是个句柄,err 是打开结果。err = nil 表示打开失败。
	s, err := serial.OpenPort(c)
	if err != nil {
		log.Fatal(err)
	}
  1. 发送串口数据
	n, err := s.Write([]byte("012345"))
	if err != nil {
		log.Fatal(err)
	}
  1. 接收串口数据
	buf := make([]byte, 128)
	n, err = s.Read(buf)
	if err != nil {
		log.Fatal(err)
	}

完整代码

package main

import (
	"fmt"
	"log"
	"time"
	"github.com/tarm/goserial"
)

func main() {

	//设置串口编号
	c := &serial.Config{Name: "COM5", Baud: 115200}

	//打开串口
	s, err := serial.OpenPort(c)
	if err != nil {
		log.Fatal(err)
	}

	// 写入字符串“012345”
	n, err := s.Write([]byte("012345"))
	if err != nil {
		log.Fatal(err)
	}

	//延时100
	time.Sleep(100)

	buf := make([]byte, 128)
	n, err = s.Read(buf)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("Read %d Bytes\r\n", n)
	for i := 0; i < n; i++ {
		fmt.Printf("buf[%d]=%c\r\n", i, buf[i])
	}
}

运行结果

到此这篇关于GO语言实现串口简单通讯的文章就介绍到这了,更多相关GO 串口通讯内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解如何使用Golang扩展Envoy

    详解如何使用Golang扩展Envoy

    这篇文章主要为大家介绍了详解如何使用Golang扩展Envoy实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • golang跳转语句goto,break,continue的使用及区别说明

    golang跳转语句goto,break,continue的使用及区别说明

    这篇文章主要介绍了golang跳转语句goto,break,continue的使用及区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go语言代码格式化的技巧分享

    Go语言代码格式化的技巧分享

    在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式化方面有着独特的处理方式,,接下来,让我们深入探究Go语言的代码格式化技巧
    2025-06-06
  • 在 Golang 中实现一个简单的Http中间件过程详解

    在 Golang 中实现一个简单的Http中间件过程详解

    本文在go web中简单的实现了中间件的机制,这样带来的好处也是显而易见的,当然社区也有一些成熟的 middleware 组件,包括 Gin 一些Web框架中也包含了 middleware 相关的功能,具体内容详情跟随小编一起看看吧
    2021-07-07
  • Go中的应用配置管理详解

    Go中的应用配置管理详解

    这篇文章主要为大家介绍了Go中的应用配置管理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Go语言中的iota关键字的使用

    Go语言中的iota关键字的使用

    这篇文章主要介绍了Go语言中的iota关键字的使用的相关资料,需要的朋友可以参考下
    2023-08-08
  • GO语言内存逃逸和GC机制的实现

    GO语言内存逃逸和GC机制的实现

    本文深入解析Go语言的内存管理机制,重点介绍内存逃逸和GC机制,包括指针逃逸、接口类型逃逸等7种典型场景,下面就来详细的介绍一下
    2026-06-06
  • go语言中的Stringer的使用示例详解

    go语言中的Stringer的使用示例详解

    Go 语言中的 Stringer 是一个非常有用的接口,它在标准库的 fmt 包中定义,Stringer 接口允许类型定义它们的字符串表示方式,这在格式化输出时特别有用,这篇文章主要介绍了go语言中的Stringer的使用,需要的朋友可以参考下
    2025-02-02
  • Golang HashMap实现原理解析

    Golang HashMap实现原理解析

    HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,这篇文章主要介绍了Golang HashMap实现原理,需要的朋友可以参考下
    2025-04-04
  • 理解Golang中的数组(array)、切片(slice)和map

    理解Golang中的数组(array)、切片(slice)和map

    这篇文章主要介绍了理解Golang中的数组(array)、切片(slice)和map,本文先是给出代码,然后一一分解,并给出一张内图加深理解,需要的朋友可以参考下
    2014-10-10

最新评论