go get -u "github.com/tarm/serial"package main
import (
"github.com/tarm/serial"
"log"
"time"
)
func main() {
//设置串口编号
ser := &serial.Config{Name: "COM2", Baud: 9600}
//打开串口
conn, err := serial.OpenPort(ser)
if err != nil {
log.Fatal(err)
}
//启动一个协程循环发送
go func() {
for {
revData := []byte("123456")
_, err := conn.Write(revData)
if err != nil {
log.Println(err)
continue
}
log.Printf("Tx:%X \n", revData)
time.Sleep(time.Second)
}
}()
//保持数据持续接收
for {
buf := make([]byte, 1024)
lens, err := conn.Read(buf)
if err != nil {
log.Println(err)
continue
}
revData := buf[:lens]
log.Printf("Rx:%X \n", revData)
}
}目前有一个弊端
测试发现无法串口自动成帧。串口Read的数据可能会多包打印出来
尝试过在serial.Config配置里面加入ReadTimeout时间限制,也无法稳定的得到整帧buf