这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » MicroPython教程之TPYBoard v102 CAN总线通信

共1条 1/1 1 跳转至

MicroPython教程之TPYBoard v102 CAN总线通信

助工
2017-10-25 14:11:38     打赏

  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效果图

1.png



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]