照理来说,USB-CAN这种东西应该已经被做的烂大街的工具,国内居然没有一个拿得出手的开源方案。淘宝上各种虚拟串口方案、替换dll兼容某立功软件的各种方案....价格都很低,性能和可靠性嘛.......就不多说了。 这里推荐一个国外的开源工具CANable,ta有完全开源的软硬件及上位机支持,支持windos和linux Stock can并且都免驱哦。且支持Python。 并且与网上众多的USB CAN采用虚拟串口的方式实现免驱不同,CANable采用的winUSB的免驱方案,USB bulk双缓冲的模式,实际传输性能远超那些虚拟串口的USB-CAN,甚至比ZLG早期的产品的每秒帧数还高很多。 我实测过CANable最高接收速率每秒1.5万帧,真的超变态!!! 下面重点来了:本文将介绍如何DIY一个你自己的CANable(tb上搜索也有成品可以买到)。 CANable实际上应该是3个项目组成: 硬件candleLight主页 : http://canable.io/ 
硬件设计是比较简单的,就是一块带usb和can的stm32f0 + CAN收发器TJA1051/3。 
github:http://github.com/HubertD/candleLight pdf原理图:http://github.com/HubertD/candleLight/blob/master/export/v1.1/pdf/candleLight-v1.1.pdf 这个因为是开源项目,用的pcb软件是kicad,不习惯kicad可以直接去仓库下面export\v1.1目录下查看输出文件,包括gerber,bom,pdf等等,基本上可以直接拿来打样加工了。原理图本身很简单的,有兴趣的也可以自己画一版。
, b* |" A$ ]/ c; j# M5 Z万能的tb上已经有人做成成品了,套了一个蓝色的外壳,看起来还不错,叫做CANable Z,在某宝上搜CANable 就能搜到,价格很便宜。 ( z1 |, e) U2 m$ H9 \
固件candleLight_fwhttp://github.com/candle-usb/candleLight_fw 需要注意的是这个固件工程是在linux下面开发的,编译和烧写的说明均为在linux下的操作。 在Windows上编译这个源码需要花时间重新建立工程。 总之呢,提供源码的好处就是可以自行修改固件添加自己想要的功能,或者学习USB和CAN代码。 正常开发呢,可以使用板子的SWD接口进行仿真和烧写,STM32出厂自带了一个USB BootLoader,大家也可以用下面的两种方法通过CANable自带的USB进行烧写。 web在线烧写固件如果只是想copy一个来用用,不需要去自己编译烧写,可以直接用STM32的USB DFU通过USB下载固件。 canable还提供了一个web的烧写页面 http://canable.io/updater/ 用谷歌浏览器打开这个页面,把板子的boot0接高电平,在用USB连接电脑。选择candlelight的固件,再点connect and update就可以直接通过网页进行烧写。 
注:这个网页上只能烧写candlelight或者slcan的默认固件,自行编译的固件无法烧写。 USB DFU-util烧写- 下载dfu-util-0.9-win64: http://liquidtelecom.dl.sourceforge.net/project/dfu-util/dfu-util-0.9-win64.zip
- 解压后,将编译好的.bin文件拷贝到解压后的目录
- 创建一个文本文件,拷贝以下内容进去,注意candleLight_fw.binary 为要烧写的bin文件,需要改成你自己的文件名。然后把这个文本文件保存为flash.cmd
- / F* z6 z% X4 I7 T
8 ?( a# { ]2 Edfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary7 v3 f; E4 ]# m0 {; z6 ?5 J
# q* M' i; g+ e( Q, Z. x+ ~9 M/ G - 6 {" n6 Q/ x4 h2 M% v* V
& ?5 g5 x+ _2 Kcmd /k2 [) f" o- l! X' q6 h+ z
3 |' E9 X% g8 K: `$ x/ L2 r) T4 t" p N( G0 N
- 整个目录就像下面这样子
 - 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
 - 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
- 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了4 [: s+ T/ C0 H- @& ^& S
, O3 h0 o, a! U1 M( ?3 k1 \' k% z% @6 j1 p
D:\workspase\USB-CAN-adapter\CANtact\dfu-util-0.9-win64>dfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
6 h: I# ?/ }2 z1 f0 ?% r, m2 \6 a# H7 H3 C9 } Q
- ( w7 I8 X) }2 C' ~: m/ H" x
* n' E6 N# f7 }: N, t% mdfu-util 0.9
5 z- \! U/ x4 N- M. o7 G4 {% o( A* R9 X
( Z4 {' D' h Y4 @; R" ], f) l L; k* K4 ]$ Q! Q9 |0 D7 S; r) Q1 y
" r) V5 B( k$ U2 b+ m0 X, h
. I# a- `; m! \, @0 }
5 t" v+ t7 R% M% v/ @& e) F7 b2 p
$ x6 O+ B* t. m3 A9 q+ J) o+ O; P) ]Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
# F3 ^& u2 t, E! o" Z
0 c; E9 h& b. B1 m; }- ( o/ ], S4 U e" n% \! _; ~. C
0 M4 R1 U) z9 Y, ?1 ^Copyright 2010-2016 Tormod Volden and Stefan Schmidt: h* G) n2 ^! s6 \2 E$ z8 D4 B/ W
1 z( _+ w |6 D+ ?# z - ' N" \) }7 U/ K2 r
) z) |+ C* u( Q3 `8 I
This program is Free Software and has ABSOLUTELY NO WARRANTY
3 N. G8 Z4 R; Y4 c4 T+ o
. F. e1 n7 Z" j5 u1 F8 q
. J+ q T" r; d$ X$ x' T
/ Q0 D: b" N: U+ @. H; V: LPlease report bugs to http://sourceforge.net/p/dfu-util/tickets/
/ p9 O' b' B" e) J- c, G c
) \: @* X7 j) E* ~& M- % b! f' s( c4 l6 ]# `
$ f+ {7 n. C$ a: x
' @; O$ ^& H& F0 Q4 z& y7 B4 o v6 t* x- a
- ) F: b2 p/ p6 `) n4 S
. m' z' C! ?! H4 z
Invalid DFU suffix signature) s4 B& H" x7 d' Z
6 t$ n+ q1 Z/ P( M5 Y, D5 z
' y7 t r. P9 n- O# \# P* d
+ a# \: Z) r. w! [5 p! b4 JA valid DFU suffix will be required in a future dfu-util release!!!' W r* j" V" M7 H
1 f& X* L% J2 R6 J* R n' Q k
/ F. [+ N' c" o7 x# H
L+ V0 J. W! c& V) NOpening DFU capable USB device...
5 f/ q; M6 p0 w7 G1 v, y: i
) s- X/ r! q5 A; X0 d- ' r* q% T7 _6 [7 V6 D
6 O5 { o* b% }4 f, SID 0483:df11- K' _, Z6 E& c: m' b1 U) o3 N
3 y% I( z) _2 }* Q! r+ D+ e
- - m3 x5 t( ~0 l# }0 A/ v
- F: x0 N: R* t# X/ Z- ~6 i% VRun-time device DFU version 011a* y5 i1 S- p4 y; Y/ i0 m! W! H
; g: A3 X2 J; E' v, ?& s
* w# _1 v$ ^# R; B6 Y
( T7 \4 P" U- YClaiming USB DFU Interface...
! j" P, [- X9 S" y# S& i5 F. a" G
; x+ N) D) C+ {1 C
; r/ v9 U5 L+ _8 X
% S5 v P: C5 O( @/ pSetting Alternate Setting #0 ...7 g' Q$ b& o" I! H3 E l
; @$ |7 ]2 F& D
( d, i9 s, y2 d
) i w% t a4 u B& P N1 ~' ~' MDetermining device status: state = dfuERROR, status = 10
5 f7 }' b$ s2 _* p
6 ~9 B- h$ `* r9 i% U x' K
# H7 B2 r( O" G+ z' r; C
- Q$ S* ~1 ~5 bdfuERROR, clearing status
# |7 @1 }4 r6 b( E2 [. W' S# A! I- Y2 v' O) Y
- % z8 [ B( J/ h
2 J: H! o% { x. p, KDetermining device status: state = dfuIDLE, status = 0& J" v* z1 d$ E! P
4 ^( h- r4 a# m8 u6 n
5 y) m6 P, @8 g$ }: s& W
8 f |8 t, L+ q" L( udfuIDLE, continuing
9 R9 o& [/ h! ?: N d, s3 w+ t0 _& K( r; U
; T d0 e! ~2 \/ b% w$ }. @! v
+ Y {+ h( v9 t; DDFU mode device DFU version 011a
7 c5 `+ ]( {3 R% c5 d9 D* ~3 p) o1 G8 g) w' k3 h0 s/ b. ]0 q9 w
- 6 H' L1 l, R0 d) L5 x
3 v7 ^6 c, m: TDevice returned transfer size 2048
, M, l7 C) H6 L! ]- i
4 E) S0 t1 P4 }. l6 C( j, k" Z5 d
3 v: J- w7 E' o8 D
3 U* Y: e' ^7 ~& V+ o( hDfuSe interface name: "Internal Flash "0 s8 Y. B5 h1 V: R: Z4 a
$ F4 \: y0 ?& D& Q/ s
- " e, v+ G# E+ ~ e
, {- I+ L' f( Q+ y
Downloading to address = 0x08000000, size = 36108
" e# l' k1 v1 I, _7 E, C0 }( d% Z5 S! B v; h) O( R4 [: `$ D
; H: x+ n& w- B, B8 j9 o* o
2 D. K& f. a. n7 ]8 G% bDownload [=========================] 100% 36108 bytes5 d7 W- X3 w; z4 u/ I
# d/ o1 h3 X* p: z, S0 Q
( V1 N0 y+ P, S! h5 v3 j2 Y2 A
9 y: V s6 b) R- x' G) vDownload done.; m) K% _- C! M5 _* y l* h
. c( N2 T0 w# o$ S: l, g
: ]) Q4 C! x9 a/ \& g) g1 W% s0 L0 v
File downloaded successfully, Q1 `/ F, ^. K6 V5 g ?% q# v' G
3 F1 e8 o$ H* m+ e }3 N( V
9 z; l( C# T+ t% @* ? 6 j, M1 z; Y+ e* M
上位机cangaroo初支持基本的can报文收发之外,cangaroo还支持: 1. 导出报文数据 2. loopback 自发自收模式 3. 静默模式(接收到报文不应答ACK,用于总线监听) 4. 调整通讯采样点 5. one-shot 单次发送模式(禁止自动重发) 6. 加载DBC协议文件 


github:http://github.com/normaldotcom/cangaroo zip下载:http://canable.io/utilities/cangaroo-win32-0363ce7.zip
( H5 f7 T3 o0 U1 }. [) t9 H3 T |