开源 STM32 USB-CAN项目

照理来说,USB-CAN这种东西应该已经被做的烂大街的工具,国内居然没有一个拿得出手的开源方案。某立功和PCAN动辄2000+的价格也是离谱。淘宝上各种虚拟串口方案、替换dll兼容某立功软件的各种方案....价格都倒是便宜,性能和可靠性嘛.......就不多说了,上位机软件也是烂的一塌糊涂。

8c6b6fdc6a863717179576974e0d8347.png
这里推荐一个国外的炒鸡好用的开源工具CANable,ta有完全开源的软硬件及上位机支持,支持windos和linux Stock can并且都免驱,且支持Python。


而且远不止于此,经过我不断探索,在gitlhub各个大神仓库各种折腾。
我发现这个canable这个项目衍生出了很多开源固件,目前固件和支持的软件已经极为丰富。


而且主芯片STM32F042/72支持USB DFU,可以通过USB直接更新固件,无缝切换多种上位机。关于STM32上的CAN通信基础知识,可以参考此文:CAN总线详解。也可以参考本次10.27第3条推文,演示STM32F103的CAN收发通信过程。


先上项目首页,canbale项目官网:

https://canable.io/

1d18c8ea42cc38423c926dc18cdd3296.png

首先先看硬件项目

9982811a224fc397b8a7ccd6d4583ff6.png

硬件项目其实叫做candleLight,github链接:

https://github.com/HubertD/candleLight] https://github.com/HubertD/candleLight

这个不带隔离的硬件设计是比较简单的,就是一块带usb和can的stm32f0 + CAN收发器TJA1051/3。


可惜的就是这颗stm32f0芯片现在价格涨得有点离谱了,之前在JLC打样做了几块,主芯片就去到40多大洋,加上pcb和smt,打样成本差不多投到100左右吧。


后来发现某宝上已经有商家把canable作出产品了,带隔离的价格也才100多,还带外壳配件,果断买了一个试试,某宝搜“开源 canable”就能找到,早知道就不用费劲自己打板了。


但是某宝上买的只提供了默认固件的相关资料,经过我不断探索,在gitlhub各个大神仓库各种折腾。


我发现这个canable这个项目衍生出了很多开源固件,目前固件和支持的软件已经极为丰富,可以说可玩性极高。我甚至怀疑很多某宝和咸鱼上的山寨PCAN就是canable换了一个壳子和固件而已!!!

1a721fa990a45d8ec3e2c44bd506225f.png
pdf原理图:

https://github.com/HubertD/candleLight/blob/master/export/v1.1/pdf/candleLight-v1.1.pdf

重点还是固件,第一个先说重磅的,PCAN固件


论坛已经有人分享了,还是这个链接:

https://github.com/moonglow/pcan_cantact


我会在附件里打包我编译好的代码和二进制文件可以直接USB烧写

烧写PCAN固件之后,CANable摇身一变就成了PEAK CAN-USB,直接可以使用PEAK的官方驱动以及软件(pcan-view/ pcan-explorer 5),甚至基于peak开发的其他二次开发软件(比如国内的一些新能源车上位机,奇瑞,北汽这些)。


目前使用下来和原装PCAN的兼容性还是相当不错的,但是注意不要用于ECU/PLC程序刷新,程序下载到到中途会出错,这个问题还需要进一步优化。但是想想原装PCAN动辄2000的价格,100多块钱的canable加上这个PCAN固件是真的香啊。

7049061681abd4085dcf2d24be4b922c.png
bb64aa07b7c1e01c1df0dcbdd3500e0e.png
4691e9ed84c7c7084e6c843ec19471ef.png

介绍第二个固件是canable的默认固件candleLight_fw
https://github.com/candle-usb/candleLight_fw

这个固件功能也蛮强大,采用的winUSB的免驱方案,USB bulk双缓冲的模式,实际传输性能远超那些虚拟串口的USB-CAN。


支持windos和linux Stock can并且都免驱,且支持Python。
linux下使用和PCAN一样都是内核自带驱动,支持SocketCAN 非常适合用一些开源的can的工具和库进行二次开发。

candleLight固件的图形化上位机叫做cangaroo。
cangaroo是candleLight固件专用的、简单易用的can总线调试软件,麻雀虽小五脏俱全,对于一般的can调试开发完全够用,而且专门针对汽车逆向工程增加了通过can id分类接收到的can数据帧,并且当某个id的数据帧活跃时会进行高亮显示以便于观察分析。

dc5bcc474d62b9ede01cc03b60bb9d3b.png
        支持Windos/Linux (Ubuntu发行版本)
        最大支持同时接入32个CANable模块
        数据帧时间戳
        支持数据日志保存
        支持CAN DBC 文件协议解析
        软件绿色免安装

candleLight固件还支持BUSMASTER(这个也就很厉害了,用过的都懂),BUSMASTER是一款功能强大的专业级CAN总线调试软件,不仅能够应对一般的CAN调试开发,还一个用于设计,监测,分析与模拟CAN网络的开源的开放式总线PC软件。BUSMASTER已被RBEI概念化,设计与开发,同时基于CANvas软件工具。


不过candleLight固件需要下载增加BUSMASTER增加了cantact设备支持的版本。

cea544b0dcdb1eb41ae6870b75777b51.png
def0b010287b1c17cb4c01d060c23129.png

虚拟串口转can的Stock slcan固件
对于很多不熟悉usb编程,还是需要串口协议转can的小伙伴,slcan固件就正好满足需求,CANable通过烧写slcan固件。该固件枚举为Linux、Mac和Windows上的标准串行设备。CANable可以很容易地通过重新烧写固件,在Linux中枚举为本地can设备,在Windows中枚举为通用串口设备。


在Linux上,CANable原生地与slc一起工作,因此您可以使用所有标准的can-utils命令行工具,甚至Wireshark来与总线交互。


在Windows和Mac上,CANable可以和cantact-app一起工作。这是一个简单的Java应用程序,可以实时显示CAN流量,并允许您在总线上传输消息。

4a66ee398324610d1624470950b17912.png

固件烧写方式

7ae1867dac7c1aa79d65df4eb77f5862.png

web在线烧写固件
如果只是想copy一个来用用,不需要去自己编译烧写,可以直接用STM32的USB DFU通过USB下载固件,我会在附件资料提供相应的软件和文档说明,并提供编译好的几个固件。

canable还提供了一个web的烧写页面:

https://canable.io/updater/


这个真的超级方便了,意味着你不需要任何烧写器或者准备任何固件编译的环境,只要有谷歌浏览器,就能随时随地切换固件,是不是很强大!


用谷歌浏览器打开这个页面,把canbale的DFU拨码开关按下去,在用USB连接电脑。选择需要烧写的的固件类型,再点connect and update就可以直接通过网页进行烧写。

71ae08ff1b52fca65de10455355b8191.png
13c4999ecc63c42740f833ad5365e459.png
注:这个网页上只能烧写canable的官方固件,自行编译的固件无法烧写(现在该页面已经支持烧写PCAN固件了!给力)。

USB DFU-util烧写固件
下载dfu-util-0.9-win64:

https://liquidtelecom.dl.sourceforge.net/project/dfu-util/dfu-util-0.9-win64.zip

解压后,将编译好的.bin文件拷贝到解压后的目录
创建一个文本文件,拷贝以下内容进去,注意candleLight_fw.binary 为要烧写的bin文件,需要改成需要烧写的文件名。然后把这个文本文件保存为flash.cmd

dfu-util --dfuse-address -d 0483:df11 -c 1 -i 0 -a 0 -s 0x08000000 -D candleLight_fw.binary
cmd /k

canbale的DFU拨码开关按下去,连接电脑USB线会识别成“STM32 BOOTLOADER”

如果识别失败需要下载安装驱动,

https://canable.io/utilities/ImpulseRC_Driver_Fixer.exe

识别成功后,双击运行之前创建的flash.cmd文件,会看到开始烧写的进度,如下就是烧写完成了

Download        [=========================] 100%        36108 bytes
Download done.
File downloaded successfully

获取相关固件和文档资源,请点击阅读原文,提取码: 8crv。 

b8f31e4a2784c06f4618d7276b976c48.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows Workflow Foundation - [介绍及相关资源]

Workflow Foundation是能使你在Windows平台上快速构建工作流应用程序的编程模型,引擎以及工具。WF支持各种各样的工作流场景:包括以用户界面为中心的页面流程,文档为中心的工作流程,业务规则驱动的业务流程等。 如果你使用的是VS2…

Go语言web框架 gin

Go语言web框架 GIN gin是go语言环境下的一个web框架, 它类似于Martini, 官方声称它比Martini有更好的性能, 比Martini快40倍, Ohhhh….看着不错的样子, 所以就想记录一下gin的学习. gin的github代码在这里: gin源码. gin的效率获得如此突飞猛进, 得益于另一个开源项目httproute…

8位ADC是256还是255?

昨天的文章发了之后,有朋友找到我,给我讨论了很多关于ADC细节。晚上给个朋友在51上调ADC0808芯片有一个朋友是做硬件的,他有从事过专业仪器设备,常年有使用ADC的经验,他给我的观点是,8位ADC对应的就是256。…

WCF中使用HttpSession

在WCF中不能使用HttpSession&#xff0c;即使Host是IIS也不可以&#xff0c;这就造成在WEB应用中集成WCF不太方便&#xff0c;其实可以通过配置搞定&#xff0c;关键在于三点&#xff1a;Host、契约类、Client端。 Host上要求Web.config中有定义&#xff1a; <system.servic…

boost库在ubuntu下的安装

系统是ubuntu虚拟机&#xff0c;安装的是boost_1_60_0。 &#xff08;1&#xff09;首先去下载最新的boost代码包&#xff0c;网址www.boost.org。 &#xff08;2&#xff09;进入到自己的目录&#xff0c;解压&#xff1a; bzip2 -d boost_1_60_0.tar.bz2 tar xvf boost_1_…

Google的投票站点在用Asp.net

https://survey.google.com/wix/p0621608.aspx https://survey.google.com/aaaaaaaaaaaaaa.axd https://survey.google.com/wix/xxxxxxxxxxxxxxxxxxxxx.ashx Server Microsoft-IIS/6.0X-AspNet-Version 2.0.50727 X-Powered-By ASP.NET 转载于:https://ww…

所谓的0拷贝不就是为了让CPU休息吗?深入理解mmap

1.开场白环境&#xff1a;处理器架构&#xff1a;arm64内核源码&#xff1a;linux-5.11ubuntu版本&#xff1a;20.04.1代码阅读工具&#xff1a;vimctagscscope我们知道&#xff0c;linux系统中用户空间和内核空间是隔离的&#xff0c;用户空间程序不能随意的访问内核空间数据&…

Python3 B格注释

看tornado源码&#xff0c;看到一些函数定义时的不解的地方&#xff0c;查了一通&#xff0c;原来是注释。 冒号注释变量&#xff0c;箭头注释函数&#xff1b; 例子如下 Python3环境下&#xff0c;执行以下代码。 def a(x:这是X变量) -> for test: print(x) 转载于:https:/…

Java多线程同步Synchronized使用分析

同步的概念&#xff1a; 同步分为 同步方法 和 同步块 两种方式。 锁定的内容分为 锁定类的某个特定实例 和 锁定类对象(类的所有实例) 变量分为 实例变量(不带static的变量) 和 类变量(带static的变量) 使用同步的原因 1. 在系统中对访类要使用多线程进行访问; 2. 在该类中有 …

boost::function的用法(一)

boost::function的用法 本片文章主要介绍boost::function的用法。 boost::function 就是一个函数的包装器(function wrapper)&#xff0c;用来定义函数对象。 1. 介绍 Boost.Function 库包含了一个类族的函数对象的包装。它的概念很像广义上的回调函数。其有着和函数指针相同的…

nhibernate学习之集合组合依赖

1.学习目标还是学习compenent的用法&#xff0c;上节实现了简单字段的组合&#xff0c;这节中将讨论两个问题&#xff1a;1.依赖对象有一个指向容器对象的引用。2。集合依赖2.开发环境和必要准备开发环境为:windows 2003,Visual studio .Net 2005,Sql server 2005 developer ed…

追更这个做嵌入式的大佬

在知乎上看到一个做嵌入式91年小年轻&#xff0c;分享给大家在他看来&#xff0c;嵌入式也是一个很吃香的技术&#xff0c;在周末写这篇文章的时候&#xff0c;也刚收到一个朋友的微信消息&#xff0c;他说自己拿到了70多万的年包offer。大家想追更作者的原文&#xff0c;可以点…

CentOS6.5安装ElasticSearch6.2.3

CentOS6.5安装ElasticSearch6.2.3 1、Elastic 需要 Java 8 环境。&#xff08;安装步骤&#xff1a;http://www.cnblogs.com/hunttown/p/5450463.html&#xff09; 2、安装包下载&#xff1a; #官网地址 https://www.elastic.co/downloads/elasticsearch 3、新建用户 Elastic高…

C#中跨窗体操作(1)--事件

在应用C#过程中&#xff0c;经常会出现通过“窗口2”来处理“窗口1”上的控件和显示内容等。可以通过事件的处理方式来完成&#xff0c;具体步骤如下&#xff1a; 1、在“窗体2”中声明事件 public delegate void Change(); public event Change myChangeevent; 2、编写…

boost中bind的使用

最近对boost的bind部分比较感兴趣&#xff0c;对其背后的机制进行了简单的分析&#xff0c;和大家分享一下。 注&#xff0c;我所看的代码是boost_1_64_0&#xff0c; 想来各个版本的差异不大。 定义函数 [cpp] view plaincopy int f(int a, int b) { return a b; }…

这道字符串反转的题目,你能想到更好的方法吗?

周末有一个朋友问了一个笔试题目&#xff0c;当时还直播写了答案&#xff0c;但是总觉得写得不够好&#xff0c;现在把题目放出来。大家看看有没有什么更好的解法题目有一个字符串&#xff0c;如下&#xff0c;要求对字符串做反转后输出//input the sky is blue//output blue …

WinAPI: 钩子回调函数之 SysMsgFilterProc

SysMsgFilterProc(nCode: Integer; {}wParam: WPARAM; {}lParam: LPARAM {} ): LRESULT; {}//待续...转载于:https://www.cnblogs.com/del/archive/2008/02/25/1080722.html

流媒体服务器搭建实例——可实现录音,录像功能

由于我也是刚开始接触这个东东&#xff0c;原理什么的不是很清楚&#xff0c;这里我就不说了&#xff0c;免得误人子弟&#xff0c;嘿嘿&#xff01;第一步&#xff0c;下载FlashMediaServer3.5&#xff0c;网上有很多资源&#xff0c;这里就不提供了&#xff0c;大家google一下…

使用HanLP增强Elasticsearch分词功能

hanlp-ext 插件源码地址&#xff1a;http://git.oschina.net/hualongdata/hanlp-ext 或 https://github.com/hualongdata/hanlp-ext Elasticsearch 默认对中文分词是按“字”进行分词的&#xff0c;这是肯定不能达到我们进行分词搜索的要求的。官方有一个SmartCN 中文分词插件&…

boost::function的用法(二)

boost function是一组类和模板组合&#xff0c;用于包装各种函数。从功能上&#xff0c;它类似于函数指针&#xff0c;但是比函数指针的功能更强大。 使用boost function&#xff0c;必须包含头文件 [cpp] view plaincopy #include <boost/function.hpp> 除了头文件外&…