应用例程:CAN报文的自由发送与接收


基本信息

通过两块STM32F103RCT6核心板,演示如何通过CAN通讯进行数据的发送与接收。核心板B采集电位器的数据,转换为电压后,通过CAN发送到核心板A,核心板A接收到数据后,将数据通过OLED屏显示出来。

在需要连接多个设备时,相对于半双工的RS485串口通讯,CAN通讯的最大优势是支持多主站,谁的数据有变化,谁都可以主动上报到总线。CAN通讯物理链路层自动进行总线仲裁、数据校验和通讯错误重试,并且不需要单片机干预。比起Modbus的一主多从的轮询方式,有更好的时间响应。

视频下载

暂无

实验硬件

STM32F103RCT6核心板(2块)[ 购买 ]

CH340E通讯小板(2块)[ 购买 ]

Micro-USB通讯线(2根)[ 购买 ]

OLED屏SSD1306(1块)[ 购买 ]

可调电位器模块(1块)[ 购买 ]

CAN通讯模块(2块)[ 购买 ]

电路参考

  • CH340E通讯小板A通过Micro-USB通讯线到连接电脑。
  • CH340E通讯小板A连接STM32F103xC核心板A
    CH340E通讯小板AGND----GNDP4端子STM32F103xC核心板A
    +5V----5V
    TXD----RX
    RXD----TX
  • CH340E通讯小板B通过Micro-USB通讯线到连接电脑。
  • CH340E通讯小板B连接STM32F103xC核心板B
    CH340E通讯小板BGND----GNDP4端子STM32F103xC核心板B
    +5V----5V
    TXD----RX
    RXD----TX
  • OLED屏插入STM32F103xC核心板A的P5端子。
    OLED屏SSD1306GND----GNDP5端子STM32F103xC核心板A
    VCC----V3
    D0----PB3
    D1----PB5
    RES----PD2
    DC----PA15
    CS----PC12
  • 可调电位器模块连接STM32F103xC核心板B
    可调电位器模块OUT----PA5P1端子STM32F103xC核心板B
    VCC----V3P3端子
    GND----GND
  • CAN通讯模块A连接STM32F103xC核心板A
    CAN通讯模块AVCC----V5P1端子STM32F103xC核心板A
    TX----PB9P2端子
    RX----PB8
    GND----GNDP1端子
  • CAN通讯模块B连接STM32F103xC核心板B
    CAN通讯模块BVCC----V5P1端子STM32F103xC核心板B
    TX----PB9P2端子
    RX----PB8
    GND----GNDP1端子
  • CAN通讯模块A连接CAN通讯模块B
    CAN通讯模块ACANH----CANHCAN通讯模块B
    CANL----CANL

关键配置说明

为了简化,这里STM32F103xC核心板A与核心板B采用同一套硬件配置。

添加Can蓝图,在蓝图中添加CAN通讯驱动管理模块Can、CAN通讯底层模块CAN1_CanL、CAN通讯底层实现模块CAN_CanLI。
选择模块CAN1_CanL,确认通讯使用的单片机管脚为PB9(TX)、PB8(RX)。

选择模块Can,在配置节点Controller中,添加控制器Controller0,使用的底层实现为CAN1_CanL。在确认下默认的总线波特率是否为500K。

选择模块Can_Fe,在配置节点Port中,添加用户端口Port1,使用Can模块中的设备Controller0。

选择模块Can,查看Can_Fe模块在TxPdu和RxPdu自动创建的CAN报文发送和接收节点:Can_Fe_Port0_TxPdu、Can_Fe_Port0_RxPdu。

A/D转换器、OLED屏的配置可以参考以下两个例程:

应用程序

梯形图(核心板A,接收并显示)

NETWORK 0 使能CAN接收的端点0,报文接收条件为任意报文(ID和IDMASK都为0)。

NETWORK 1 用SM0.0驱动CAN接收,一旦收到有效报文,V120.0为有效保持一个扫描周期。

NETWORK 2 当收到报文时,对总报文统计自加1。如果报文ID等于16#4400且数据长度为2,对有效报文统计自加1,同时移动收到的数据

液晶屏配置(核心板A,接收并显示)

梯形图(核心板B,采集并发送)

NETWORK 0 获取AIW0的变化情况,保存到变量VW2

NETWORK 1 如果不在发送冷却时间内,且数据变化大于4,则更新VW0,并设置因为数据变化需要发送的请求M0.0

NETWORK 2 如果不在发送冷却时间内,且超过1秒没有发送过数据了,设置因为超时需要发送的请求M0.1

NETWORK 3 若有发送请求M0.0或者是M0.1,处理下数据然后启动发送任务

NETWORK 4 统计发送成功的次数

实验步骤

  • 将配置上传到服务器,固件下载到STM32F103xC核心板A和B后,将梯形图A和B也分别下载到核心板A和B,电位器保持不动时,可以看到核心板B定时向核心板A发送数据。扭动电位器时,核心板A上显示的电压立即变化。

指令说明

相关下载