当前位置: 首页 > news >正文

[MicroPython]TPYBoard v102 CAN总线通信

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

                              095956w80381j11eh68c08.png.thumb.jpg

 

转载于:https://my.oschina.net/micropython/blog/2236053

相关文章:

  • Java多线程——AQS框架源码阅读
  • 超大数据下大批量随机键值的查询优化方案
  • node中的npm的使用
  • 未来五年中国本土机器人制造业将显著提升
  • RabbitMq之Work模式
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • python里使用反斜杠转义遇到问题记录
  • AliOS Things 电源管理框架使用说明
  • python三级菜单实例(傻瓜版和进阶版)
  • linux之HTTP服务
  • 【原】戏说Java
  • WPF 获取鼠标屏幕位置、窗口位置、控件位置
  • 使用ABAP正则表达式解析HTML标签
  • 计算机英语学习笔记(六)
  • java多线程和长连接,三方转换通信的实践(1)——转换端程序
  • 深入了解以太坊
  • hexo+github搭建个人博客
  • [LeetCode] Wiggle Sort
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • httpie使用详解
  • Intervention/image 图片处理扩展包的安装和使用
  • Linux Process Manage
  • php ci框架整合银盛支付
  • Python连接Oracle
  • win10下安装mysql5.7
  • 当SetTimeout遇到了字符串
  • 聊聊flink的TableFactory
  • 微服务入门【系列视频课程】
  • 最近的计划
  • Linux权限管理(week1_day5)--技术流ken
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​queue --- 一个同步的队列类​
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (1)SpringCloud 整合Python
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C#)获取字符编码的类
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (九)信息融合方式简介
  • (转)JAVA中的堆栈
  • (转)ORM
  • (转)大道至简,职场上做人做事做管理
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • @javax.ws.rs Webservice注解
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [AIGC] Redis基础命令集详细介绍
  • [Android]Tool-Systrace
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [Angular 基础] - 数据绑定(databinding)
  • [bbk5179]第66集 第7章 - 数据库的维护 03