python can总线_MicroPython教程之TPYBoard v102 CAN总线通信

原标题:MicroPython教程之TPYBoard v102 CAN总线通信

0x00前言

CAN是控制器局域网络(ControllerAreaNetwork,CAN)的简称,是ISO国际标准化的串行通信协议。CAN总线结构简单,只需2根线与外部相连,并且内部集成了错误探测和管理模块。

本篇文章以TPYBoardv102开发板为例,为大家介绍一下如何使用STM32自带的CAN控制器,来实现两个开发板之间的CAN通讯。

0x01实验器材

TPYBoardv102开发板2块

杜邦线若干

CAN总线收发器模块VP230(SN65HVD230)2个

0x02前期准备

1. TPYBoardv102的CAN控制器。

v102上有两个CAN控制器,分别为CAN1和CAN2,对应引脚如下:

CAN1(RX) Y3

CAN1(TX) Y4

CAN2(RX) Y5

CAN2(TX) Y6

v102上虽然已经有两个CAN控制器,但是想要完成两个板子之间的CAN通讯,还需要搭配CAN收发器模块。CAN收发器就是CAN控制器和物理总线之间的接口,主要作用就是将CAN控制器的逻辑电平转换为CAN总线的差分电平,在两条有差分电压的总线电缆上传输数据。

2. 去tpyboard的官网看看CAN类库的介绍。

http://docs.tpyboard.com/zh/latest/library/pyb.CAN/?highlight=pyb.CAN

看一下官方的实例代码,这些基本上够用了。

from pyb import CAN can = CAN( 1, CAN.LOOPBACK) can.setfilter( 0, CAN.LIST16, 0, ( 123, 124, 125, 126)) # seta filter toreceive messages withid= 123, 124, 125and126can.send( 'message!', 123) # send a messagewithid 123can.recv( 0) # receive messageonFIFO 0

0x03硬件连接

两个v102我用的都是CAN1。具体连接示意图如下:

TPYBoard v102 (CAN1) CAN收发器模块

3.3V VCC

GND GND

Y3(RX) RX

Y4(TX) TX

两个收发器之间H接H、L接L即可。

0x04源代码

第一个板子等待接收,当接收到数据再发送。

importpyb frompyb importCAN can = CAN( 1, CAN.NORMAL) can.setfilter( 0, CAN.LIST16, 0, ( 123, 124, 125, 126)) # set a filter to receive messages with id=123, 124, 125 and 126whileTrue: ifcan.any( 0): data=can.recv( 0) # receive message on FIFO 0print( 'DATA:',data) can.send( b'message1', 222)

第二板子是先发送,然后等待接收。

# main.py -- put your code here!frompyb importCAN can = CAN( 2, CAN.NORMAL) can.setfilter( 0, CAN.LIST16, 0, ( 222, 221, 231, 241)) # set a filter to receive messages with id=123, 124, 125 and 126can.send( 'message!', 123) # send a message with id 123whileTrue: ifcan.any( 0): data=can.recv( 0) # receive message on FIFO 0print( 'DATA:',data)

0x05效果图

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Java实现CAN通信,我可以为您提供一些思路和建议。首先需要了解的是,Java本身并不支持CAN通信,因此需要使用第三方库来实现CAN通信功能。常用的Java CAN通信库有以下几个: 1. jCAN:一个开源的Java CAN通信库,支持Windows和Linux操作系统。 2. can4java:另一个开源的Java CAN通信库,支持Windows和Linux操作系统。 3. SocketCAN:一个基于Socket的CAN通信库,可以在Linux下使用。 您可以根据自己的需求选择其中一个库进行使用。下面简单介绍一下使用jCAN进行CAN通信的步骤: 1. 下载并安装jCAN库,可以从官方网站(https://sourceforge.net/projects/jcan/)下载。 2. 编写Java程序,引入jCAN库,并创建CAN通信对象。 3. 打开CAN通信通道,设置CAN通信参数,如波特率等。 4. 发送CAN数据帧。 5. 接收CAN数据帧。 下面是一个简单的示例代码: ```java import com.sun.jna.Native; import com.sun.jna.Pointer; public class CanTest { public static void main(String[] args) { // 加载动态库 Native.loadLibrary("canlib32", Canlib.class); // 打开CAN通信通道 int channel = 0; int handle = Canlib.canOpenChannel(channel, Canlib.canOPEN_ACCEPT_VIRTUAL); // 设置CAN通信参数 Canlib.canSetBusParams(handle, Canlib.canBITRATE_250K, 0, 0, 0, 0, 0); // 发送CAN数据帧 Canlib.canWrite(handle, 0x123, new byte[] {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}, 8, 0); // 接收CAN数据帧 Canlib.canReadWait(handle, msg, null); } } // jCAN库的接口定义 interface Canlib extends com.sun.jna.Library { int canOpenChannel(int channel, int flags); int canSetBusParams(int handle, int bitrate, int tseg1, int tseg2, int sjw, int noSamp, int syncmode); int canWrite(int handle, int id, byte[] msg, int dlc, int flags); int canReadWait(int handle, CanMessage msg, Pointer timeout); } ``` 需要注意的是,以上代码仅为示例,具体的CAN通信细节需要根据具体情况进行调整。另外,jCAN库还提供了许多其他的CAN通信相关接口,您可以根据需要进行调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值