正文 1142字数 286,704阅读


go get -u "github.com/tarm/serial"
Run code
Cut to clipboard


    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) } }
    Run code
    Cut to clipboard


      目前有一个弊端
      测试发现无法串口自动成帧。串口Read的数据可能会多包打印出来
      尝试过在serial.Config配置里面加入ReadTimeout时间限制,也无法稳定的得到整帧buf