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

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

' A" M' Y$ `& G( O; ?

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

4 D8 m, G* l/ W3 d8 C& K& J
固件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
    • - V/ _3 c( U2 ]% [

      1 N1 y9 \) D( a  z; [dfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
      0 m+ f% B0 k: W

      " R$ K) @: N: J
    • $ \% c/ j8 K* A! d
      5 ~' S# R7 w3 U
      cmd /k
      # {! K. a7 H4 v9 \: ~" o: Z# ]; f
      ! P+ a8 e* ^% c2 L- S
      & p/ ]: z6 [: k& b: A9 H# D/ r
  • 整个目录就像下面这样子
  • 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
  • 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
  • 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了
    , f- S  v2 k% T9 e) C0 U6 n- T: M

  • 2 N4 U" U7 Z9 L; q) c$ R

    , e0 G) U! B* {5 G8 hD:\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
    3 {2 e" y0 {1 d9 Z( c( S

    % I+ q% o$ t4 U' ~
  • 2 h! e) ]# s8 f! j" a7 ?
    * b$ ^/ z/ Z( H, A# S$ ~
    dfu-util 0.9' O+ N$ [" F% B( R2 _; G9 b

    # _$ _- k6 p$ h! c0 N1 s3 H9 H' ?( ?

  • # V6 i2 ^+ q0 n' W

    & h; a- L  G7 L4 A0 y) C# r& N' _! @3 A

    7 T4 ^' w1 m7 a( I" B8 `7 i5 o
  • . G6 f3 C" l  F1 w' e
    ) l0 s8 i6 _' i# f! \- M
    Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
    - b/ ]% b& o, l6 H( K# p
    $ P" {+ i% a9 U; O2 N
  • % ?5 l) k4 q! ?2 D0 e- L& g" |$ O
      \( ^) y. S+ }3 D3 H) @1 U
    Copyright 2010-2016 Tormod Volden and Stefan Schmidt
    1 m2 s. S& k" |
    2 @- _; l, f+ d  T
  • ; `! x2 ?# T- l  P9 b* {

    : ?. f5 p% O% O, b- w! YThis program is Free Software and has ABSOLUTELY NO WARRANTY, a. u; s) ^7 ^* a( Q2 {2 A
    * q, o$ r* g4 J; V4 k0 g2 o

  •   I% }# Y; j; b* Z$ n( `7 H& ?

    4 ~% @5 d1 `, DPlease report bugs to http://sourceforge.net/p/dfu-util/tickets/
    $ d' G/ V0 c7 |6 @
    4 N, n- R5 X: o. Q4 ^

  • 7 i0 t- d! g' n( U( \5 L, ^
    3 F4 p2 H4 |  l) J$ ~

    # N6 v8 \, l: U9 I7 n- B& h; s

    7 o, r. |) \- h/ J1 G1 s  }
  • / A. i' A8 E0 ~" }8 R

    6 B7 d" |: f4 f' ]! I) kInvalid DFU suffix signature+ |- l- H# i: w" ]
    & r5 r, g4 o* D& f2 N
  • ( l6 l7 y: r/ ]3 e% {6 x' ]

    0 g: m  T) Z; g2 J( f8 BA valid DFU suffix will be required in a future dfu-util release!!!
    8 c" |; c/ `9 ]9 ?6 B0 j
    : g7 x9 ^4 y1 \: J8 J

  • # q6 i* }7 b# e
    ; f4 s' L* [. {+ l# T" i
    Opening DFU capable USB device...- c/ W8 _; z6 d1 B2 l* G- w

    $ y& O' E; P1 F' U+ t
  • ( L  y% `1 e1 v, N" f! o

    + G  N" ]1 K6 z3 \4 }  f; w. l! b8 aID 0483:df11  g+ r3 P' m% E: T( K; S8 U

    . ]& K% B# y# ?, K
  • + H, K6 T. l! o
    , C1 a. a  c" y- N
    Run-time device DFU version 011a, {' {' ^: h3 ^) B) t* O4 r

    " e9 D/ L5 G' Q. N: w3 ^  U

  • : R" w1 E% g# c9 Y3 `

    8 o' Z8 B* q/ \$ i! XClaiming USB DFU Interface...3 G( _) p% P( `
    # L. k) t$ a2 X8 Z: M: h

  • ; f7 d( O( D  D1 ^% a

    , U; o7 R5 |! D1 n4 [1 ]; H5 d) D+ ESetting Alternate Setting #0 ...
    , [) H$ I0 [9 L% C5 D& c
    6 [" L- U" N/ s. M

  • " c/ y- q; x' z/ }) S1 r) _4 Y

    * j: E* p& N1 ]+ W- mDetermining device status: state = dfuERROR, status = 105 [9 Y: V2 s3 [# g$ w# o9 C, q, t( z; R

    % w+ T( g5 S& U( a5 t3 L$ n
  • ) Z: n1 ^0 \! M. A! X/ Y9 H

    4 O" c3 y% T# p4 u9 s& ~9 r& u1 cdfuERROR, clearing status6 J4 C4 ]2 N3 g2 N; G- d
    * r5 a! C0 ^) h- z" y0 S) e
  • . d" H. M" N% k6 `6 g2 K5 V0 F

    4 b) z0 N( m) P: w# ?" p/ l+ p; H% ^Determining device status: state = dfuIDLE, status = 0
    4 i" m' G$ s0 R  v: u6 H& u. {
    5 L" N/ g8 A5 j$ \# w
  • ) q+ G' Q6 P" a7 v( t1 \: K
    . g; d/ q. Z0 r0 p2 m, D; A  n
    dfuIDLE, continuing: A  b0 T* h! S

      u+ |* D' Y6 `  G$ R0 q3 p

  • & [' Z0 g; `7 v% f/ ^- p1 {4 b, c
    * g0 Y- N/ D8 R- d" n% o
    DFU mode device DFU version 011a  N$ i3 ?: k, U: ~5 x
    / X2 s7 w  o- _% o, n0 B7 k0 H

  • 5 O' N' u0 {  t$ T

      x/ y4 c3 w% e0 a) [5 x" L+ [% xDevice returned transfer size 20483 m! `: b1 N% K5 w( B. d5 Q
    # I" h% c0 |3 D9 _2 d
  • 1 I" x# D, H6 y& \
    - X* g! T4 y  x" ^3 x9 D4 y
    DfuSe interface name: "Internal Flash  "2 g+ v+ F# c/ m: D
    / u( l3 }5 Z# y% z

  • $ |" e( K% _9 e0 ~  S
    : f$ {5 `0 S5 j) U! p
    Downloading to address = 0x08000000, size = 36108
    8 F$ D7 d' p9 t
    & L* D: Y3 B" h$ [1 Q

  • ; ^8 m; X. n' i: G. Q
    4 l( k9 t; E0 [: y+ b- x
    Download        [=========================] 100%        36108 bytes
    / v# s. Y3 V8 \# s

    % W& I  i2 }9 z( d. e  U

  • . U% P) z; \* R5 H/ l; v( \
    7 O6 r5 s0 }4 i
    Download done.
    % S+ ]) e, E  o' s- w0 E% m) K9 F6 c

    ( x  z. a, {4 W! o

  • ! Y7 W/ Q- i  o& A8 `+ k4 n
    , L' `2 _# ?2 ]: R
    File downloaded successfully3 {* ?5 \$ b8 m2 J- ^3 ]6 L

    2 d. L  x) `; s9 F% Q) _* I# x1 d, E
      @* I8 e/ b6 h# h* q8 |1 \7 N7 S
8 h9 R. }5 n, v9 d9 A
上位机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

' l& [* }9 I  E
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版