应用例程: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块)[ 购买 ]: 电路参考
关键配置说明为了简化,这里STM32F103xC核心板A与核心板B采用同一套硬件配置。 添加Can蓝图,在蓝图中添加CAN通讯驱动管理模块Can、CAN通讯底层模块CAN1_CanL、CAN通讯底层实现模块CAN_CanLI。 选择模块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 统计发送成功的次数
实验步骤
指令说明相关下载
|