你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

分享一个超好用开源的USB-CAN项目(基于stm32f0)

[复制链接]
7805-2047233 发布时间:2020-8-27 21:45

照理来说,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等等,基本上可以直接拿来打样加工了。原理图本身很简单的,有兴趣的也可以自己画一版。


5 j; B, B. x" N8 I" Q  I! T. \

万能的tb上已经有人做成成品了,套了一个蓝色的外壳,看起来还不错,叫做CANable Z,在某宝上搜CANable 就能搜到,价格很便宜。

5 ^4 h7 h' C/ x+ T  H
固件candleLight_fw

http://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

    • 0 ?  `& b) h9 F1 `( e, Y. c

      & G/ i9 F7 P+ h( Mdfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
      % X) k6 x# Z' ^4 _- M4 X: P6 ~* t) p

      3 |, m! d5 E9 P( o5 o% E

    • 4 O/ ?# g* w$ s) s4 w2 @& j% x) H0 o

      ' P0 b& q; l; G. ]( bcmd /k* o* E0 J- D2 `# A+ t9 O$ u! Y

      : W1 ~- ^$ Z4 w8 ]  ^) Z" S6 C3 o8 `. h  c
  • 整个目录就像下面这样子
  • 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
  • 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
  • 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了; z1 h9 _! p+ X' P/ w# l

  • * v( b+ J3 F) Y; h: L' V

    4 ~3 {% Z6 G5 A7 xD:\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
    . n1 B7 ~' ]: _, M

    & M: ]" ?- ?6 J8 k
  • 6 u# a  A- _5 n5 r) f2 e3 g8 C4 U- p

    3 d3 i3 V1 K+ ^( T8 z$ jdfu-util 0.9
    - P7 i9 r  Y5 p$ b5 ?
    2 Z  Y5 [( c1 S8 C% f5 n1 D' M( y
  • 1 p4 R: k# J& t$ ~0 R

    $ ^- f  `- s9 N- s
    ) D( r! [1 |: Y* S7 A; j) j  Z7 k
    1 H& @( I* r7 E: ^! _8 A9 q! I
  • 7 z% m0 j8 q- L+ Z2 s; |

      Y7 s' }/ h* n+ H1 ?" SCopyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.) Y4 `9 a1 r6 e$ T2 n

    7 o- K! ^; g8 W& v# {' ^

  • : C1 n( i8 w  h: b0 _
    6 O6 ]7 Q$ n0 n( n0 G3 ]% D
    Copyright 2010-2016 Tormod Volden and Stefan Schmidt
    # D1 Z3 P7 G5 f" C# O! u& e- W

    - f+ o" q  j4 B- M* r, w
  • . Z% ?4 p9 S, b, @: ?8 ~' J4 [& |

    # [9 {/ k% ?, }* u- {+ ^This program is Free Software and has ABSOLUTELY NO WARRANTY6 V" R  S# a& H
    + {, O/ \6 z1 X2 D

  • 0 u5 A6 I# o% i4 \' P$ K
    4 A& l' {6 {+ [- x0 `4 V. d
    Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
    9 m# B1 R* }7 ]; U* h

    ; G& C& K7 v6 E

  • : p, ?. ]8 j+ S5 J1 s+ g. J

    , d$ x4 G5 A& t* Y8 c& Y% z) _5 e/ y0 K

    ; e6 k! L% w2 J2 ^

  • ( O2 d" G6 B! g$ {
    0 ?6 r3 T. F, O; a% a; [
    Invalid DFU suffix signature
    1 o  t- D) D4 z6 F6 R" D

    ) I) |! i4 Q) s' B( `

  • 5 s+ t) l+ r9 f9 z9 R# w

    / l* R$ Z( ?6 L1 vA valid DFU suffix will be required in a future dfu-util release!!!
    0 l4 [1 T% {1 S! C2 s

    3 R4 V2 u& B3 f+ I9 a
  • / G# [; t2 v8 ~+ M$ E  R
    3 C& J$ ~+ [) a! ~
    Opening DFU capable USB device.... y3 q! u' V7 R  F
    ; C  F1 H6 p. q0 W9 K! K0 K# A
  • , y4 c# O% }8 B( t! U. V
    8 K4 [0 n- _. B' j6 L* C) n
    ID 0483:df11* K1 _' H) [$ n, M- B

    / M. j' Q' R9 V& {  I

  • / G4 U+ D0 p) f* v. I9 W! X% s

    3 a7 k; _- a9 @% D; TRun-time device DFU version 011a
    ( l- T( e. m2 a  B% b- \9 X- j, j- n

    2 P0 V6 h: x' ~0 L1 b

  • 6 \  h  a5 i# z4 a: A" [. F* Z
    - `' }3 ]% I2 g$ c! F& k
    Claiming USB DFU Interface...
    5 s% O: S1 @& T- L( T
    0 ~* r# `- ]5 j( e
  • 0 s  i' U7 ^# q+ z
    0 ^* A4 S2 K- [  D
    Setting Alternate Setting #0 ...
    + c5 z/ O8 l" E- V

    : W: B! M4 G$ w1 k! o, J
  • ; O$ F0 l6 O$ Z6 C

    ! Q% N% g4 C2 zDetermining device status: state = dfuERROR, status = 10
    : N- r5 d' y. h
    5 q5 y% E3 Y$ n7 R

  • ! {/ ^4 Y/ a; y0 \2 X
    & x! n( r* f& D9 \! U6 s" c  [
    dfuERROR, clearing status
    . a0 z7 @( R/ A9 r% G# w, L0 Z

    & s; g2 i" e; \  ~/ e

  • 5 q- q8 n1 F" c; I2 ~

    / l% T" ?7 _6 ~) m+ zDetermining device status: state = dfuIDLE, status = 0
    $ \$ H* M: @; b9 T' `

    . u& I$ l: R* I! J( }3 }

  • ! n) @3 @' {$ C2 C8 U. X: J8 B

    ' H/ ^) D' G- J6 O1 \! {" RdfuIDLE, continuing
    6 @4 k. j. [/ Q% l! O' p, [
    / h7 @( o- _7 l5 x$ ?+ Z

  • - r0 N. ]  b0 Y5 p
    ' v0 Q/ p* n8 ~/ |, t7 j! I7 Y
    DFU mode device DFU version 011a
    4 p. _  P$ ^7 u! ?2 C3 V, L" x

    % J' Z0 Z& ?" V8 h; N+ y+ \* W
  • / Z. w3 B- H! _6 ~" E3 H% O

    9 Y6 F) g# |% d8 m) B0 JDevice returned transfer size 20486 r+ Y2 H) T" l+ ^3 R0 `$ q

    - P; G: _. s' Q& ^8 A
  • , d# y0 P' m+ ^! d# q3 W

    9 O; ^/ \% m, w2 x) UDfuSe interface name: "Internal Flash  "$ F! e  R6 Q* ^7 X& d5 a
    ' R# b. L# b* {# h# i" _

  • ( r* v) ]8 F: F. X6 r# O' R

    4 R  P) |4 K3 a) k; _Downloading to address = 0x08000000, size = 361081 y* ?7 N. m1 M- M( I
    ( D- l( M4 v# p5 L; Y  E
  • 2 }4 `, i& G; k. T

    2 I. B  x% l1 `* ~Download        [=========================] 100%        36108 bytes
    ! x9 W$ }) Y( L9 B' d/ ~& Z8 P
    $ k  z; r1 x, @1 o$ I% S2 c' a  A

  • 0 x0 A' }" w4 z: c! _( K% N( h
    ( b4 |( w& S* c. Y
    Download done.
    0 [4 m8 j# m+ [( m3 t5 u
    + [6 J# b" S2 T9 e" q
  • # c- t! s/ c2 V: a$ |6 m; ^0 c% o
    # w, u) b$ F) A  ]
    File downloaded successfully
    & l# E7 U3 |2 J! t; w8 ~$ S: v; k
    6 e; O2 u$ e7 }: |/ T7 f

    , m: x# R! t3 @/ h' R
) V9 v: Q  l) G" g* F. u: D; Q
上位机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

1 {+ X, P! t. t. N" ^5 ^
赞 1 收藏 3 评论4 发布时间:2020-8-27 21:45

举报

4个回答
pkoko 回答时间:2020-8-30 11:20:48
不错,支持开源
Siriu 回答时间:2020-12-3 21:37:33
好东西,谢谢楼主分享
goyhuan 回答时间:2020-12-4 08:23:42
谢谢分享
米兰的无线电 回答时间:2020-12-4 11:43:08
这个USB-CAN太牛了

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版