找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1156|回复: 0
打印 上一主题 下一主题
收起左侧

[MicroPython]TPYBoard v102 CAN总线通信

[复制链接]
跳转到指定楼层
楼主
ID:130183 发表于 2018-10-9 10:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
0x00前言

  CAN是控制器局域网络(Controller Area Network, CAN)的简称,是ISO国际标准化的串行通信协议。CAN总线结构简单,只需2根线与外部相连,并且内部集成了错误探测和管理模块。
         本篇文章以TPYBoard v102开发板为例,为大家介绍一下如何使用STM32自带的CAN控制器,来实现两个开发板之间的CAN通讯。

0x01实验器材

TPYBoard v102 开发板 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效果图




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表