MicroPython中怎么实现CAN总线通信

这篇文章主要介绍“MicroPython中怎么实现CAN总线通信”,在日常操作中,相信很多人在MicroPython中怎么实现CAN总线通信问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MicroPython中怎么实现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))  # set a filter to receive messages with id=123, 124, 125 and 126
can.send('message!', 123)   # send a message with id 123
can.recv(0)                 # receive message on FIFO 0

0x03硬件连接

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

TPYBoard v102 (CAN1)

CAN收发器模块

3.3V

VCC

GND

GND

Y3(RX)

RX

Y4(TX)

TX

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

0x04源代码

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

import pyb
from pyb import CAN

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 126
while True:
    if can.any(0):
        data=can.recv(0)            # receive message on FIFO 0
        print('DATA:',data)
        can.send(b'message1',222)

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

# main.py -- put your code here!
from pyb import CAN
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 126
can.send('message!', 123)   # send a message with id 123
while True:
    if can.any(0):
        data=can.recv(0)            # receive message on FIFO 0
        print('DATA:',data)

0x05效果图

MicroPython中怎么实现CAN总线通信

到此,关于“MicroPython中怎么实现CAN总线通信”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!

新闻标题:MicroPython中怎么实现CAN总线通信
本文网址:https://www.cdcxhl.com/article34/jcjsse.html

成都网站建设公司_创新互联,为您提供网站策划做网站小程序开发响应式网站静态网站服务器托管

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司