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

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


/ K% L0 E3 Z) M; c6 V9 \1 _( N

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

9 C5 l7 ^0 I7 c& N
固件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
    • 1 L$ t2 ]3 n2 M7 J% ]0 p4 ~) _9 o( x

      4 P+ |+ H7 C0 B6 e- Ndfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
      ) i( J3 O0 h( |, I8 p0 v
      , `  y& [9 j. H1 q4 V- E

    • " Q$ x  ^; F- j% V. F: _7 t$ U* |" G
      ' W% q  ?7 _' Y
      cmd /k" [0 o/ l: }# C

      # c: h& r; h+ h  _: t
      - c8 S9 \/ [7 B! ~; r  m, u
  • 整个目录就像下面这样子
  • 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
  • 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
  • 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了
    & h! P3 p7 h# n/ D

  • 1 q! Y- {% s+ `& }' G

    . G; c* B& W# o5 v" P/ D  tD:\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.binary7 x) X2 }3 r# D# o/ j3 g

    * f; i9 v7 y0 K2 c: Q% ^5 `

  • * [! h" e; F& Y, V" a8 {, I

    / H2 u, h) n" }+ c- }$ E9 m* i5 u. Adfu-util 0.9. J* ^) I7 x2 ]! v8 M1 v' ~
    7 T- d: y9 }6 ]
  • # p) o$ E. ^6 h( l2 R: @, G6 q  \

    " o1 i5 h2 X6 }, w
    & L- B& t+ [* E/ G0 o& U6 K6 Y
    % e- L+ Q) I$ ~- e# K

  • 7 Q. i- s: O; y" f
    9 o0 u. L* j6 [
    Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc./ ?4 n& S7 c: m2 [+ I$ w, }1 w/ k2 i

      \3 O5 v& d" b2 `( Q' f
  • / I% |2 d& U. l' c! ]) ^8 X

    : t" D5 e4 l. `Copyright 2010-2016 Tormod Volden and Stefan Schmidt9 i. i3 q! s6 i( |4 r# ~4 m# F

    - C/ E1 \$ h# H3 Z4 p
  • 5 w" z* X, T  V- S8 }& Z
    ) K: [7 l, I% s( u
    This program is Free Software and has ABSOLUTELY NO WARRANTY7 ~& Q  u/ A, c

    ( A% F1 N+ W2 x3 p
  • 9 ~9 F5 }1 A1 [& s

    * X+ S. i6 ?+ c9 \. W8 b  \Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
    3 D* G4 I# V; k1 M# R5 V1 `4 m

    1 ^+ |' g. z% r5 a
  • . {( X1 b( d* T$ J$ u1 ]5 v
    8 o3 p, ]! B3 |, P! M2 {  v
    * ~+ w+ }) P9 _5 C+ A

    1 L# a! j; t; W" z( W2 n" j

  • - Q! @2 u, k( v+ u( F* A
    2 i% Z8 \8 ^5 x7 I0 `
    Invalid DFU suffix signature
    : ^& o3 h" H1 e7 M9 Z' \# M0 e
    + R7 L5 {$ f: o0 E$ N" V" L4 F/ A2 i
  •   h! s2 z/ Y" n

    " E3 N# d/ Y  h9 P. ~A valid DFU suffix will be required in a future dfu-util release!!!1 m5 D& p6 F8 R: I0 }" _6 X; h, ~9 u' i

    - O9 }6 z2 [) ^' u( v  B  S, @- w

  • 2 q& h5 F7 D) u% y8 W: {1 m
    5 G* o8 Q% l; w5 `. M
    Opening DFU capable USB device...$ j, l2 z8 g6 j1 k0 i* u7 @. f* [9 d
    " P& _+ {7 W) S! s8 ~! g0 w
  •   L* x4 `; b& d0 m$ e
    1 u+ k. B3 I- a' Q, u$ j6 @+ r3 _
    ID 0483:df11
    3 N5 s/ B' d; L! u" D* B

    ! S1 H2 h- n4 u' w/ o- o
  • 4 ^' ^, R0 ?0 H; V1 U! a* H

    7 T6 D9 _/ k  N6 h4 k& K2 ?Run-time device DFU version 011a
    . e" o5 _2 u3 a

    7 M2 D, G1 Z. E# u! F& b

  • $ F. y  L: q" t& l
    0 o4 P* {+ z5 Z: J' s
    Claiming USB DFU Interface...# {  Y# V. N# Z5 M2 U1 ^

    ( i5 W: r6 k2 A2 I6 v

  • 5 f0 M' R# c' C$ p& i! E
    1 m& P- j* y6 b/ Z$ o/ g! G
    Setting Alternate Setting #0 ...7 r% h5 D& k5 f# Y% ?/ y

    # i+ e$ I5 C& s& U$ ~
  • , O1 b) L4 G* d+ I; g% M( J4 e8 Y7 g
    , I$ D5 a8 c* p6 ^
    Determining device status: state = dfuERROR, status = 10
    : O9 F' `; ?& F7 g% i9 Q+ F
    ' t, i/ ~$ G* I6 b$ E& O3 x1 C

  • * X: u! D3 R1 A3 T+ w
    & x+ ^# B& S+ c$ O
    dfuERROR, clearing status) ~8 T% K- l' A2 R* t6 ]0 A% q

    . o4 J( C4 u2 M$ J) E& C; y
  • . f7 O6 {0 E& w) E( _

    3 H! E# I/ P8 a# y- ^8 q  o7 b, G5 cDetermining device status: state = dfuIDLE, status = 0$ h3 t% B  }1 s. j) E  Z# V" X+ `
    2 x! ?; |6 V5 ^+ C! L
  • & s0 y( I* T4 n$ V
    9 I2 v( m, k4 u- Y1 L3 h% @9 t
    dfuIDLE, continuing
    5 u' Q- E7 l% [* s

    ( |2 j' X+ q5 q$ I8 C

  • 7 t( F9 k" \0 u# Q
    3 X  R) Y% k2 g! z( ?
    DFU mode device DFU version 011a7 B+ ?- E6 `& s0 d
    & q1 Y4 R  g" h/ s7 z2 |

  • 8 ]6 R" Z. W& a9 V0 m) E

    1 ?: g& |, f. Z& K  T- C4 Q& ?Device returned transfer size 2048
    . U+ F& u, n1 Q6 O8 f; t/ T! \8 E
    - o5 y* R0 m7 N! u

  • 8 [1 g, Q- |4 Y7 h7 A/ \  D5 p* o

    ! z  r: x& S" aDfuSe interface name: "Internal Flash  "
    9 r7 s/ x( @* S* p9 n
    " B% {3 |0 }7 K; t
  • ' N9 L8 t+ |6 P, x! m3 a0 c- q

    . t1 g! x9 _7 \& B4 ~' iDownloading to address = 0x08000000, size = 36108/ Q% ]1 e& g; }7 ?% x

    % t" \/ V2 J) c- W7 W
  • 5 G4 O( X4 l' _. ^) K1 G

    # v# k! A2 b+ K& E: r+ g7 z) ^Download        [=========================] 100%        36108 bytes
    : O( |1 Q  A" P( @8 S& |% @
    . n- ~5 k" N3 I% ~5 W0 s

  • " C- c, }4 w, O3 a

    $ ]! E, B2 y5 U4 @' \0 @, vDownload done.
    . J: Z0 q$ C3 _1 u6 d) X4 q3 Q  b

    * F; ?& h$ I, h0 D$ @3 J- _
  • - A8 h! g4 Q) b4 S  S
      ]/ |3 y6 c! e1 J, k
    File downloaded successfully7 K! _0 F, u- H" b8 ^
    9 d! b! ]  c' w/ B& y

    , _( v6 `7 f) O
3 S$ J2 r" d; v1 t
上位机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


  K! ]+ i. n1 s# l, M% F" {
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管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版