标题:
MicroPython教程之TPYBoard v102 CAN总线通信
[打印本页]
作者:
bodasister
时间:
2017-10-25 13:52
标题:
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类库的介绍。
看一下官方的实例代码,这些基本上够用了。
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效果图
1.png
(36.4 KB, 下载次数: 86)
下载附件
2017-10-25 13:52 上传
作者:
数码小叶
时间:
2018-4-8 13:29
谢谢分享,学习一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1