使用Go语言做串口通信项目,使用了go-serial,文档中也给出了简单的使用说明,但是自己码出的代码却无法接收到数据,经过排查,代码如下:
GitHub地址: https://github.com/jacobsa/go-serial
// Set up options.
options := serial.OpenOptions{
PortName: "COM23",
BaudRate: 115200,
DataBits: 8,
StopBits: 1,
ParityMode:serial.PARITY_NONE,
RTSCTSFlowControl:false,
}
// Open the port.
port, err := serial.Open(options)
if err != nil {
log.Fatalf("serial.Open: %v", err)
}
// Make sure to close it later.
defer port.Close()
for {
buf := make([]byte, 0, 512)
c, err := port.Read(buf)
if nil == err {
fmt.Println(buf)
} else {
fmt.Println(err)
}
time.Sleep(500 * time.Microsecond)
}
问题原因:
初始化buf时候,length设置为0,分析如下:
查看源码:
这里判断了len(buf) > 0,如果判断失败,_p0为零值,猜想少了这个操作所以读取失败。修改buf初始化代码问题解决。
buf := make([]byte, 512, 512)