尝试了使用Ubuntu与STM32控制板的串口通信,走了不少弯路,记录一下。
上位机:ubuntu16.04
下位机:STM32
USB转串口芯片:CH340G
1.串口驱动安装
- 在沁恒http://www.wch.cn/download/CH341SER_LINUX_ZIP.html下载了CH341的驱动,安装时编译不通过。
- 想起在某个地方看到需要和linux内核版本对应,于是找到https://elixir.bootlin.com/linux/v4.20-rc1/source/drivers/usb/serial/ch341.c下载了4.13对应的内核C文件,编译倒是通过了,但是加载总是出现打不开端口的问题。
- 后来又查到了Ubuntu 16.04 CH340G驱动问题 https://blog.csdn.net/mobiux/article/details/80115254,还是使用沁恒的C文件,做两行修改,然后sudo make;sudo make load。顺利装载,终于解决了驱动安装的问题。
2.串口调试工具使用
使用了cutecom和picocom,cutecom的图形界面比较方便,设置也比较直观。
- 首先确认串口已连接,参考https://www.cnblogs.com/siikee/p/4193121.html
lsmod | grep usbserial , 如果有usbserial,说明系统支持USB转串口。
插上USB转串口,在终端输入命令#dmesg | grep ttyUSB0,如果出现连接成功信息,则说明ubuntu系统已经识别该设备了。 - 然后安装cutecom,参考https://blog.csdn.net/tansir94/article/details/81357612(该链接有后续代码调试参考)
下载:sudo apt-get install cutecom
打开:sudo cutecom
设置:串口选择处,默认的只有ttyS0~ttyS3,这里直接手动填写/dev/ttyUSB0。波特率设置115200,open for :reading writing。
打开串口,可以看到接受到STM32的数据,选择16进制显示需要勾选clear右边的Hex output框;发送数据在底端input输入,输入16进制需要将LF line end替换为Hex input。
3.串口通信程序
参考https://blog.csdn.net/tansir94/article/details/81357612
重点注意:
如果提示Unable to open port,是由于权限不够引起的,进行如下操作
sudo gedit /etc/udev/rules.d/70-ttyusb.rules
添加 KERNEL==“ttyUSB[0-9]*”, MODE=“0666”
可正常通信。
重点注意!!!编译完成后一定别忘记source devel/setup.bash ,不然可能在别的终端中找不到生成的可执行文件的路径!!!