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

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

" D4 w- d9 l# T) R& H

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


% J) P0 E$ o. k8 `固件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
    • " J9 m/ @4 J1 Y2 D7 r2 ^
      & Q+ M7 S; m. r+ o$ ?* O0 m
      dfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
      & Z5 T' S; ]& P7 Y: y1 A! G

      : N2 a: ~3 {- N5 v/ h2 t; H0 {
    • 2 k6 u4 T, @* P

      ; _" u' O1 G/ o( Qcmd /k; {/ j5 T7 p- L- s
      ! y2 [; [  C( o4 i2 F
      9 s) _& x2 j# L5 r
  • 整个目录就像下面这样子
  • 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
  • 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
  • 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了
      D/ ^' |6 s; g: H, V2 N

  • 9 H0 f* @% P; c1 p; \2 V3 ^" N) G% Z
    7 _' \; _8 S7 d
    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
    9 G$ Y. C* v4 h6 g* J7 D
    1 B' J$ ?5 r+ ?# e0 z! M* a

  • & h( M4 s( O( P% _( J! L6 a

    , A& e6 m% M" U8 R7 K- ]dfu-util 0.9' o) L5 ?8 q9 ]& [3 }1 @, y& {

    ' K) l7 z* }5 V- c$ L) j) i# F7 i  @
  • ' {0 ~: t. z, i1 W
    , w  X6 u& ?. _

    3 o! |, ^( y/ [
    ; s# a# p3 v' N  X6 Q% G5 [

  • ( y% X/ ~" z) @. D8 X3 r# M2 {

    * S5 _3 U/ X$ a# Z0 R$ X3 l: oCopyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc., P! Z) k  r$ t# }

    1 W4 |$ y  K& E( l' S

  • * M" r" p: b: M' E4 c+ z- T

    : D1 c# c5 c  j9 F3 W0 ?0 JCopyright 2010-2016 Tormod Volden and Stefan Schmidt" h8 f1 {9 n' n0 s% m
    * H+ @& w9 R: @0 c0 X  Z) q8 X* o

  • & x  n  j2 Q: D- P0 Z: ?
    3 L/ |) Q7 q3 M8 B$ R( o8 Y% R
    This program is Free Software and has ABSOLUTELY NO WARRANTY8 z5 A' I/ x; P4 Y

    3 y7 n' Q" {4 K4 ~5 L1 x  w

  • & K) c0 B# G* H7 g! {& h

    ' `& A0 F" C/ v3 N( {5 Y, }Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
      l& {( p: u  V6 U$ o: E
    . s$ l, H. k  N2 v' {
  • 3 p0 _+ O' E6 z

    / l# n2 \  v6 `  F# F% k" F- F
    : Q/ `$ M! t* m

    / K5 D, l  Q2 c- ?! \) Z

  • ( X, C. s6 @- s" ^
    , C9 J+ R% |' ?2 J$ o
    Invalid DFU suffix signature/ p0 M8 P+ R& k0 m' L3 w6 g
    2 W$ Q; f$ @8 h- K: H3 T* a. B

  • 8 L8 W1 v7 @( G7 L5 G- W; B
    & H2 I! m8 Q$ [& _$ I
    A valid DFU suffix will be required in a future dfu-util release!!!
    , a6 y, s' t( n' G6 K

    ( J; F5 {# J& |# ]  [
  • 9 T  ]* O: |0 v" M$ L+ S( b
    % ?) s, C6 t4 G( \- m! u2 T4 v
    Opening DFU capable USB device...' y( X/ }. N5 [. q' m- Z6 P0 B

    : R2 H- g1 c6 {6 j2 p0 t
  • / f& o, E& ?# m2 v
    3 q9 @: b; B9 g& x# B; {
    ID 0483:df11, y% G1 d# ^9 [0 M4 `

    9 B2 a* S2 |8 s3 O( R

  • $ W9 l2 U$ ^' B, o9 ~

    6 `. D) }+ o! [) Q3 h+ ]& N$ VRun-time device DFU version 011a6 R  L7 b9 ^/ x& h' @2 U
    1 r1 s) M  j/ M: G9 N8 v
  • 8 I7 s) M- |5 c- j

    3 G" \6 v. K7 I% [" B/ G. d5 hClaiming USB DFU Interface...
    # S) C* S* k6 ~6 Z' C2 v# S. B! Z
    3 U$ B% H( B- K, T- r
  • 2 H* r' N' ^% @/ ^1 o
    # R; J) x" b0 T1 b8 U  f
    Setting Alternate Setting #0 ...& p+ o3 a/ m7 |5 W1 D4 g

    + J2 n0 _; l. z9 H6 t6 O' C& ?3 V% Q0 }& ?

  • & R% Y. S2 y# ~. A3 I( q. Q

    7 A! j( d$ u) ?2 h9 F( a( b! IDetermining device status: state = dfuERROR, status = 10
    * {7 ^9 V2 |, b, @  [
    5 a( [8 v, M% |- x0 D; c: {: ]/ \
  • , [" n0 q: f. l0 w

    2 j* ~" w/ [- T. Q' e% JdfuERROR, clearing status4 G( P3 {' d5 _; b! b& @

    ; J8 z- g0 [* K( K* U

  • " E: [6 ?! c0 y8 L

    $ f) ?3 B8 L# ~( ?5 y. i* ?% G- fDetermining device status: state = dfuIDLE, status = 06 r! l" T; T% U% h* q

    5 _  _5 k$ M8 a

  • , m$ B4 _! t+ r1 M' i

      X8 y, Z3 t/ F& mdfuIDLE, continuing7 P; y/ G' z% I( ]$ k) {, M

    3 ?1 \0 a5 [+ G" f! m

  • ; l7 Y) z5 E1 Z# q
    ' v4 t9 z1 G1 Y: b
    DFU mode device DFU version 011a2 H7 V) N& d9 b

    , T0 F: f- X7 Y
  • " X1 m, @  A, x, v3 N. N

    5 @) f4 q4 B1 S- e! LDevice returned transfer size 2048
    # O! W  ^2 d7 ~$ j9 T

    ' n1 @) e- Q9 |  O9 |1 ?( G
  • ' T1 y8 \! L- g  I9 U; f- R" E
    ! P; t: G: a1 v: g  }  `7 }* V
    DfuSe interface name: "Internal Flash  "
    7 t/ [* D0 q; R% f8 x$ {) z5 S
    : a7 D" n- ~$ I  F  d

  • : p+ f* ?" d2 B* q4 q6 K! J5 T3 e
    ; Z, b; K4 _3 G% r/ v7 J
    Downloading to address = 0x08000000, size = 36108
    $ |4 \& b; j2 U$ B& j
    9 a4 E( |9 e8 N( j9 U; }& o
  • 9 P" w, f2 C& A, K( F4 o

      R3 T" b% N, j* rDownload        [=========================] 100%        36108 bytes, x- n5 N) d6 p
    ! I) A4 Y+ T3 X+ `" J0 G# G+ z( u2 R

  • 7 Z3 G4 p- M1 n4 B" ]" g4 o9 }

    3 C+ f, `6 A' u4 \  z  NDownload done.. U# q: ?( v- {1 J7 R# F6 y
    * v( ^; s% z8 j

  • ' ?2 i$ S  {$ r+ @1 l' _( P
    / |# g6 K- c+ Y4 L2 c
    File downloaded successfully
    ( S+ P5 R/ \3 v' ]) G* S: ]
    $ A2 F3 z% C' C$ Q  U8 \0 _# b
    + W4 d$ w. U2 ^

- ]* F. |2 d0 p6 e4 r7 Y8 p上位机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


: @2 x4 q+ d! L8 O( D$ a
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 手机版