stm32串口程序开发(openwrt中添加stm32usb虚拟串口)

写在前面:

由于7628的外设支持比较少,所以在开发的时候有时会使用stm32的单片机来进行扩展,这时候就需要使用虚拟usb转串口功能,而一般自己开发的usb设备在openwrt中是无法识别的,所以我们需要在内核中添加识别代码。

单片机实现:

stm32官方lib中自带了使用CDC类实现usb转串口功能的例子,有兴趣的同学可以自己去网上寻找如何实现,本次只关心如何将他挂载到openwrt上。

如下所示,我们只需要关心单片机上的vid和pid的值。

#define USBD_VID 0x28E9 #define usbD_PID 0x0180

linux内核添加驱动:

由于内核中已经支持了ACM类的usb转串口驱动,所以我们不需要自己重新写驱动代码,只需要将我们的设备挂载上去即可。

打开build_dir\target-mipsel_24kec dsp_uClibc-0.9.33.2\linux-ramips_mt7688\linux-3.18.109\drivers\usb\serial\option.c

在option_ids变量中添加我们自己的usb设备的id号;

stm32串口程序开发(openwrt中添加stm32usb虚拟串口)(1)

效果:

插入usb设备后能够自动识别,在dev目录可以看到自动生成了ttyACM0文件;

root@ics:/dev# root@ics:/dev# [ 1176.220000] usb 1-1.3: new full-speed USB device number 13 using ehci-platform [ 1176.390000] cdc_acm 1-1.3:1.0: This device cannot do calls on its own. It is not a modem.[0:0] root@ics:/dev# ls autofs mtd2ro mtdblock4 spidev32766.1 bus mtd3 mtdblock5 tty console mtd3ro mtdblock6 ttyACM0

使用picocom工具可以直接对该串口设备进行操作:

root@ics:/dev# picocom -b 115200 /dev/ttyACM1 port is : /dev/ttyACM1 flowcontrol : none baudrate is : 115200 parity is : none databits are : 8 escape is : C-a local echo is : no noinit is : no noreset is : no nolock is : no send_cmd is : sz -vv receive_cmd is : rz -vv imap is : omap is : emap is : crcrlf,delbs, Terminal ready d1k1d1j1f1l1s1k1k1d1k1d1k1d1d1l1k1j1;1l1k1j1a1l1k1j

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页