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

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


8 ?7 ^. j1 j' ]' z; `3 S

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


# A, \9 x# D8 U; ]固件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 i" d6 _+ i9 k2 v. k

      ; R$ K2 b. P) c0 vdfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
      1 ~, b: d' G4 s3 B3 o" P1 C

      6 P! V5 o) N# R3 D1 o

    • & U- m4 \" o5 h  K: [

      3 e; ?* {" G8 T8 S! ]cmd /k" ?& t' p  w: z3 r+ V4 E3 p

      1 D. r( `0 V+ s; O) ?* S7 }, K' P/ E% X+ p) Y/ x2 {& F
  • 整个目录就像下面这样子
  • 短接CANable Z的BOOT0跳线(DFU跳线),连接电脑USB线会识别成下面这样
  • 如果识别失败需要下载安装驱动,http://canable.io/utilities/ImpulseRC_Driver_Fixer.exe
  • 识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了3 v; u# ]4 N  f; n
  • " T( ?8 Z0 d5 R/ H# D
    % ]/ W% o/ V, T2 b0 C
    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
    4 i# i7 [9 E5 W% M8 b* v

    5 z) K' |4 W7 G6 c
  • + e& e$ M3 x+ K: U; i

    % K/ G0 U- \  d& ?: f/ o" odfu-util 0.9
    4 w+ y! d6 q- R$ ?, Y

    ' t) M. J1 P* T# D0 l8 X4 [" w6 H
  • ( _6 C/ @% a  {

    1 t* Y& R5 w9 o+ V5 l2 T7 ^# v
    # }8 D+ H! Y; p" a; e$ ?
    ' g5 Y" w6 \, {% q7 r
  • / N9 G+ d5 `! s1 |0 c3 ?/ X( P( u
    + k3 k' b5 u# J; q. H
    Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.2 z  C+ u2 l4 J7 k6 e: W) t1 F

    ) p7 k7 N5 h- k4 B
  • , C# [4 k/ [  ^, w' |* M. n* p
    9 ]) i- M+ P+ ~3 o- O
    Copyright 2010-2016 Tormod Volden and Stefan Schmidt$ U/ |; [4 E/ E* m. ?7 ~
    3 `" m& i/ @: s* z, ~! y
  • / f; h) F* u1 ^% C) ?

    & f& S1 T- X( h2 b& K  a: [( W- wThis program is Free Software and has ABSOLUTELY NO WARRANTY( Z5 T2 d; U# t( @* C3 A& q% N/ E
      i. o4 G* l9 q  E- f$ l
  • * |9 i2 r/ [# Z. P! I: ~+ P/ w! V

    + x" W6 Y, ~$ |1 @& P$ QPlease report bugs to http://sourceforge.net/p/dfu-util/tickets/
    + Y6 f* \& m2 D0 n) b
    8 n6 O: K6 F, ^8 ]- g: W& ^6 [4 C. d
  • / q3 P; D* I7 Z# }- k3 e
    6 Q+ O* D" G) v1 M" P. Y
    4 O/ N$ `" l  X: E- T

    1 O( a# j& t2 ]
  • % v  D9 q) n) U. e& Q8 a0 \
    8 r& m$ ~5 [* b2 }$ }
    Invalid DFU suffix signature$ ~/ B( |( E4 z! d/ Z7 c/ q, t: Y3 i
      G$ H' E; Y+ R8 P* t  |

  • % R5 ?6 K9 O% }6 i" y

    + a, M; N9 Y6 S) W" tA valid DFU suffix will be required in a future dfu-util release!!!
    ' V  |! U# g' @' s+ q7 ^

    8 z4 ]6 M, O  F( h/ K& c

  • $ Y  L- |4 Z* l

    * A0 C/ Z, [1 c; g' N" y% J3 |Opening DFU capable USB device...9 B% T2 A( Q9 U; Q/ U- _( {1 {: ~
    7 g/ Q$ f# `* o. R' K8 w1 B

  • : b0 l8 R% n0 A& F
    4 u/ I1 J6 D4 M; {- ^( o
    ID 0483:df11
    % E  D1 @, `! l7 r. N3 u
    0 I; l4 v( `9 |/ e. B+ k0 b0 y6 Y# c
  • * i5 K5 y: P; l+ Q1 X4 C$ B

    : o# l2 M: ?; P# r$ aRun-time device DFU version 011a) M$ v& O, I' y: S

    5 p/ h+ l7 l8 {4 }

  • 3 W% p; f) l5 z7 d, U. k# A
    # |& B+ Y- ^, U, |% z
    Claiming USB DFU Interface...
    & O1 t1 X5 R, N4 W  U# e6 w! {

    8 o7 |& W% T) l) o
  • , T: \( G. l+ G$ ?- M5 }- q

    - @/ r1 ~9 x! [: a1 J9 ]2 G0 aSetting Alternate Setting #0 ...( F# |- {! g2 Y/ _$ Z

    5 [" t0 L( k, K4 \

  • : J4 O4 f# b6 v7 v% j, L- R+ g- F

    0 m1 _& A0 t% b+ qDetermining device status: state = dfuERROR, status = 10
    3 P% R. S* \! F5 }6 b+ J6 h+ q+ |3 z

    ' v- ?. Z6 q1 n% e7 H/ n
  • 3 ?% w- Z5 u2 ?- V6 a/ B

    " c0 q/ s9 a$ H* S5 f: S2 f# `" q' NdfuERROR, clearing status
    / r5 w! x* z* V0 j1 w3 e, C& {
    - z# }- k- V+ v

  • ' B0 X# l/ G. w. n" o. [7 `; ?
    ' l) l& c# g$ _" P% N
    Determining device status: state = dfuIDLE, status = 0
    $ E  @0 L+ @+ }# Z% M$ s
    ! ]$ B! E4 j2 h  x

  • , }% W1 X  x6 G2 h
    , f) ^8 H& P+ b9 E
    dfuIDLE, continuing
    4 u: f7 T& e' U  m

    2 F. n' ^6 h* ^; {/ V* A
  • ! C# w) _8 Z3 @4 @& ~/ l" _1 K6 Y
    9 k! o' G' \* b, e
    DFU mode device DFU version 011a
    ! j: g6 o% S' y: A5 k( `
    * s0 S4 w- i4 S& Z
  • ! u9 w# I% y, E) X

    & V" l) K8 ]1 g( @( p( H! cDevice returned transfer size 2048
    # r3 Q6 X* L2 l3 H+ {8 c# v
    6 J, i3 Y9 i( `+ K8 y& o. u8 T7 t
  • 9 d2 X8 E0 ~; t/ [
    2 U2 _+ ?& x, J
    DfuSe interface name: "Internal Flash  "
    4 t% @+ K' J" }2 s$ D% J
    # u( ^+ A% @; Z7 F

  • 0 v; X6 H7 F0 H' _* S. P
    ! p% Y7 K" [3 U- y, m, K8 `+ ?2 \
    Downloading to address = 0x08000000, size = 36108
    % J6 @* y* I' L% I" T

    ; T" _5 H1 i7 O

  •   \5 P8 a& x" F8 Q, S' R

    : @, V5 z' q7 u! I, p# ~Download        [=========================] 100%        36108 bytes% \: ?9 E0 i  p6 F/ c: Y& d
    5 f' Z" f$ Y5 H1 S' J+ c( r: l6 a
  •   `4 ~1 d3 }/ f9 {1 W  H& k) Y* E

    1 a& \7 t' r# vDownload done.! s) U8 M( O5 [; \
    8 }: s+ p, C- y5 A
  • ; z; ~) [  X9 U. r- t
    . _% F/ f4 d1 X; c# m
    File downloaded successfully
      W2 b9 z$ ]+ {

    4 ^+ R5 Y9 U' r
    ! K2 j6 p# j- i4 M5 Y" X- S" U

4 |5 K: D2 o% v" \  O上位机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

: H# X. T2 k, |1 G3 i
赞 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 手机版