STM32F103实现CAN通讯:一台主机下面挂上64个从机,从机地址为1-64,以哪种方式进行数据的传递??第一种:主机是以广播的形式向64个从机发送指令,然后64个从机同时返回数据,主机在接收解析64条数据??? 第二种:主机先向1从机发送数据,然后1从机响应返回数据,主机在接收解析1从机数据;然后主机再向2从机发送数据,然后2从机响应返回数据,主机接收解析2从机数据;直到64从机,依次循环....?? |
f407与上位机,高速通讯。
STM32F107+LWIP---如何检查tcp通讯断开?并重新连接
消防二总线通讯?
有没有用过数字式mems麦克风的,想问下SPI通讯的问题
stm32f103 CAN通讯多帧发送问题?
ST 电机电机工作站,就是那个workbench的通讯协议是啥啊?
STM32F107作为USB主机模拟串口通讯不成功(采用PL2303芯片)
stm32F1单片机iic主从模式通讯
串口通讯偶尔出现故障,不能自行恢复,如何解决
stm32f103zet6串口通讯过程中报ORE错误
不用,can总线是自带校验的,一帧can报文里包含一段检验域,使用的是CRC16校验,收到报文后can控制器会自动计算校验,校验通过才接受报文,这些都是硬件外设自动完成的,不用代码编辑,这就为啥汽车都是用can,比串口强大很多。
所以stm32能进can接受中断,说明报文已经通过校验了,不用再加校验了。
评分
查看全部评分
1、CAN总线种没有主机和从机,任何两台设备之间都可以通讯
2、虽然总线上有数据,但任意一个设备只能解析和本身地址一样的数据,其他地址的数据自动过滤,不存在解析64条数据
评分
查看全部评分
通过设置过滤器,所谓的主机可以接收所有从机的数据,但是从机之间不能相互通讯。这样的话,就是要主机通过从机的ID,解析64条对应ID的数据,这个思路正确吗 ??
评分
查看全部评分
评分
查看全部评分
void USB_LP_CAN1_RX0_IRQHandler(void)
{
CanRxMsg RxMessage;
RxMessage.StdId=0x00;
RxMessage.ExtId=0x00;
RxMessage.IDE=0;
RxMessage.DLC=0;
RxMessage.FMI=0;
RxMessage.Data[0]=0x00;
RxMessage.Data[1]=0x00;
CAN_Receive(CAN1,CAN_FIFO0, &RxMessage);
if(RxMessage.StdId==0x0001)
{
数组1接收数据
}
if(RxMessage.StdId==0x0002)
{
数组2接收数据
}
以上是在CAN接收中断程序。ID0x01、ID 0x02同时发送数据,只有接收到ID01的数据,ID02接收不到数据??程序要怎么处理???
谢谢
不会同时收到数据,因为can发送有总线优先级仲裁。
多个节点竞争总线时,ID小的优先级高;
ID相同标准帧优先级高于扩展帧,数据帧优先级高于远程帧
所以同时发送会先收到0x01后收到0x02
通过设置过滤器确实可以接收到所有设备的数据,如果所有的设备都不设置过滤器,那每一个设备都可以收到其他所有设备的数据,整个就是一个马蜂窝,根本不知道数据来自哪里,要发送到哪里,这个系统就是一个没有实际应用的系统,没有任何项目意义,那样的话就和你的思路一样的,每一个设备都要接收64个设备的数据
还有一点,CAN网络中没有主机和从机的概念,区分优先级是通过ID号识别的,所以CAN网络中每个设备必须要有ID,也就是要设置过滤器,保证网络中每一个设备的唯一性,在强调一次,CAN网络中没有主机和从机的概念,网络中关系都是平行的,并且ID越小的设备优先级越高,所以网络中的主控单元一类的ID号设置小一点,争取在同时发送数据的时候享有最高的优先级