STM32F103实现CAN通讯:一台主机下面挂上64个从机,从机地址为1-64,以哪种方式进行数据的传递??第一种:主机是以广播的形式向64个从机发送指令,然后64个从机同时返回数据,主机在接收解析64条数据??? 第二种:主机先向1从机发送数据,然后1从机响应返回数据,主机在接收解析1从机数据;然后主机再向2从机发送数据,然后2从机响应返回数据,主机接收解析2从机数据;直到64从机,依次循环....?? |
STM32F107+LWIP---如何检查tcp通讯断开?并重新连接
有没有用过数字式mems麦克风的,想问下SPI通讯的问题
stm32f103 CAN通讯多帧发送问题?
STM32F107作为USB主机模拟串口通讯不成功(采用PL2303芯片)
STM32F103C8 LIN通讯例程
求助,丐版J-Link通讯不上
ethernet可以与ethercat通讯吗?
LIS3DH SPI 通讯问题
STM32F373 CAN通讯问题CAN_FLAG_LEC
请教高手看看,STM32F1的多机通讯,地址匹配唤醒问题
不用,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号设置小一点,争取在同时发送数据的时候享有最高的优先级
我请教个问题,在数据帧里还需要自己在加入检验码吗?比如:和检验、CRC校验
不用增加校验了,CAN数据位一共就8位,再加数据位就没了,CAN的校验是在硬件中完成的,本身协议就是CRC16 所以CAN的可靠性很高
评分
查看全部评分