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

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

6 V; S) {' l" F1 a# l2 ?# ^* E6 z' L& U

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

  Y% y& y6 O4 Y/ D0 A  q0 B: `
固件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

    • ; H" I7 `# ~7 d# }
      ( B2 u3 ]8 v0 p$ Y
      dfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary! r" U4 E+ N' H7 W
      0 K& v2 L4 a1 m! S/ ~

    • ; o3 E1 ^& l, n! K+ s6 Q
      6 \8 X1 x: I2 `
      cmd /k
      " m# G+ C6 H* k6 A  ~

      " `/ A" ^. E( Y$ ?4 c5 V& J' t" {% C, |: h% U
  • 整个目录就像下面这样子
  • 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
  • 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
  • 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了* R& q4 R+ s- m$ g3 U

  • ! r) {; M7 p' I2 H4 x7 v

    ; ~8 a& f5 l( H; F5 Z2 e, H: A% E  o' gD:\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 j7 a1 |" u# G; M% }- S3 U- n

    1 g; j. }* x# G; g, J

  • . d) g, n! A) X# V! z
    ! d2 n) i4 G( ~
    dfu-util 0.92 U2 B6 C4 U7 J: W% S+ P3 D
    1 r8 R$ z4 D6 w

  • * Y; v5 H3 h& e0 \  a7 a3 G$ ?

    * Z6 P. J3 O% M+ G& x$ j  k2 I
    * J: R5 A) s& W/ L& \; ^

    & \' _% x! _4 F5 X7 V! J
  • " p; G' b. [$ h6 c* x3 b
    , \& `+ o  C4 O$ j5 C
    Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
    , U1 h2 Z3 n/ r% @5 n6 j: h
    + k3 Z7 S2 j( n5 F/ e4 e( w
  • ! a+ q1 Q* V. L
    & a  N" B0 g- p# l+ C7 j" _
    Copyright 2010-2016 Tormod Volden and Stefan Schmidt7 C5 d8 `- C/ {* S

    / i! t) |- z: E, S4 S# Q. O3 L( l

  • 5 ]* E  r* f0 x7 [( k0 e
    1 \" P# C: q7 M5 o6 `! l% ]5 `% Y
    This program is Free Software and has ABSOLUTELY NO WARRANTY
    : d% i* t+ `3 ^; n# z. c
    4 g4 I# S- \/ y7 x5 i3 T
  • ( Q  x: a" H% p* A( M& o9 R
    % P3 |  n; Y4 Z+ m- t% T
    Please report bugs to http://sourceforge.net/p/dfu-util/tickets/+ _- S0 r9 b* F# P7 |) M' r. s

    2 y4 U! k$ {3 V: L$ |& ~
  • * m5 P! X2 n3 Q1 ]  l, P2 W
    ; i3 N! z5 r3 x3 r+ ^9 s

    0 d3 I' h: y+ w4 R# |4 M

    5 v) T& e* E' t
  • ; [) Q6 `$ T3 r) R# ?8 ?2 `( G

    8 o! G' J- m' P, i! N, NInvalid DFU suffix signature
    : k* H+ ^8 ?1 g7 ]  J

    # i+ P% K) A# I, I( s. |" B

  • ; S/ ^' S8 \* n/ N. d
    7 S4 s, e: |, s; Z- {/ Z0 f7 {
    A valid DFU suffix will be required in a future dfu-util release!!!0 S/ L" c! K7 ~( M# `3 L( i
    7 i8 L" c) a# y

  • / L8 y% z, k3 f2 ^
    2 c2 `  O8 G7 E  c1 @: M
    Opening DFU capable USB device...
    6 |# s: v: X/ Z; b7 h0 T5 }

    : M& H  v( H" s7 j3 U7 C- n2 C

  • 4 A) d& m) s  L

    ' e/ ?9 W$ r7 hID 0483:df11
    2 D9 I3 `  K- N- _5 Z

    - d3 s7 Y2 b1 F& c$ l  q# R
  • : X- d# _$ F6 X$ X! ^8 [
    5 P) K3 \/ c2 \$ I: ?9 b9 {2 J
    Run-time device DFU version 011a
    & D2 D  y8 t' v2 }

    ; Q- O. ^2 v7 z6 f
  • " T( w9 w+ ^/ _& e4 }

    $ Z+ H2 [# C# ~, s1 z5 f$ pClaiming USB DFU Interface...
    : w. r6 Z& Z  d2 L! N' ?! T7 ]  i" I

    6 b) D3 V* L9 _8 _8 c" E

  •   A/ S6 K0 i. ]7 n* N- p3 Y; z

      I8 M: ~7 n5 f( iSetting Alternate Setting #0 ...
    ! _5 i" l% _: T; s; \, w
    0 j, g* [$ n: V, f0 w/ b

  • 6 w8 U) x$ `! u
    ; \# y0 G0 k+ e' G1 k$ i1 k5 V" f
    Determining device status: state = dfuERROR, status = 10
    7 j# ?0 c' ^2 Y" ~: K$ C' x% e4 x6 w, K) R

    9 a" d* o: _9 [

  • 3 i. z( V  J' h2 ?
    1 C) Y6 p2 s# Y0 G
    dfuERROR, clearing status" I( {+ ~# I6 s# k) R% W  }/ S. _# l

    % H( i5 |9 c4 R% T3 B

  • . n% ?% ]9 ^6 `8 @  R

    7 o9 r5 R! G& V% YDetermining device status: state = dfuIDLE, status = 04 @( [6 ~0 J# Y* H% F% I
    1 S8 S0 ~4 ]" m! n: Q
  • 3 X; ~* M5 Q: r! d& E/ V
    ; m8 B) X* }( P! H, ~- |; S8 [0 }
    dfuIDLE, continuing
    2 u6 S: a+ D  ^& g( u

    4 a1 L* C; j+ z# g! V1 R
  • & E$ u+ ]; r% ^/ [, }
    - l2 z$ G# x$ [4 p7 Q9 p
    DFU mode device DFU version 011a1 D4 M9 {' q+ X
    ' X( p4 |9 U: J
  • 4 c( D) u, _2 ]
    + n  u& c2 {/ }0 I
    Device returned transfer size 2048( q. u+ s7 H) p$ U. W  K$ Z

    8 l3 U* S9 k- j) O  e8 t
  • * A% {$ V" M) c3 V; u4 |0 k2 ?  [
    / W2 \3 Y8 Y5 m& k3 B- r
    DfuSe interface name: "Internal Flash  "
    ; c" p; b' T9 c3 J
    9 L/ ?  h! t& w6 \6 e
  • ; _2 y( z" A9 D

    : G% L  g+ ~1 V* p. T/ ^3 F2 @% A$ `Downloading to address = 0x08000000, size = 36108
    / T) Y6 i) ^( f5 S. E+ _. @9 g
    " g: \* s2 h9 k' @7 m
  • 2 W8 u0 |8 u6 |  e2 i2 U
    6 d, _" @" g( h7 x0 O' }  u
    Download        [=========================] 100%        36108 bytes
    " s. x& i; J# l

    " q6 }! V! T& L4 t6 u& P
  • % K' }9 @+ a" |2 x7 f( f/ ?! Z
    ( h2 u: \1 {) Y2 `$ C( w
    Download done.) T% Y2 m  e4 X" b
    7 {, Y4 Q9 G. g' D6 y9 I
  • 9 O8 ~3 Y3 {) O  F- d

    % ^: O( i/ Y6 {! {! g5 J0 UFile downloaded successfully8 o# |5 l; M4 J$ G; ?& o( k

    5 {, a3 v( u, n
    # ?5 A; `( M, h- ^2 ?! X) Y
5 X* e7 G0 h9 z. r6 Z) b
上位机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

/ E$ v7 ~2 N$ p8 E( @/ T
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 手机版