CAN是Controller Area Network的缩写,是ISO国际标准化的串行通信协议。是德国博世公司开发面向汽车的CAN通信协议。
CAN控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐形电平,二者必居其一。
CAN协议具有以下特点:
1.多主控制,在总线空闲时多个单元都可以发送消息,而两个单元以上同时开始发送消息时,根据标识符(identifier 简称ID)决定优先级。ID表示访问总线的消息的优先级。优先级高的继续发,优先级低的就停止发送了。
2.系统的柔软性。增加单元时不用改硬件,直接接上即可(速度需要与总线速度一致)。
3.通信速度快,通信距离远。最高1Mbps(小于40M),最远可达10KM(低于5Kbps)
4.具有错误检测、错误通知和错误恢复功能。
5.故障封闭功能。
6.连接节点多。
CAN协议经过ISO标准化有两个标准:ISO11898(125Kbps~1Mbps高速通信标准)和ISO11519-2(125Kbps以下低速通信标准)。
标识符过滤是一种过滤标识符的功能,它可以将想接收的标识符的过滤接收,也可以将想拒绝的标识符过滤掉。它的存在减少了CPU处理CAN通信的开销。
STM32F429共有标识符过滤器28组,每一组由两个32位的寄存器,CAN_FxR1和CAN_FxR2组成。而这个32位寄存器可以根据配置为1个32位过滤器,也可以为两个16位过滤器。
为了过滤一组标识符,应该设置过滤器组工作在屏蔽位模式。
为了过滤一个标识符,应该设置过滤器组工作在标识符列表模式。
掩码就是对用ID的哪一位需要相匹配。比如掩码CAN_FxR2[7:0]:0111 1110则表示标识符CAN_FxR1[7:0]的第一位和第八位不用匹配,其余位需要匹配。
通过这个过滤器就可以让想接收的标识符的数据到FIFO中(我们可以直接从FIFO中读接收到的数据,这就是为什么可以节省MCU的开销),过滤掉不想要的标识符的数据。
STM32F429提供了两种测试模式,环回模式和静默模式。如果只有一个板子的话可以用环回模式测CAN是否好用。环回模式CAN把发送的报文同时保存在接收邮箱中(通过过滤器),也就是自收发。
正常模式,也就是两个板子相连,一个发送一个接收。但我资金有限,只有一个板子。也没有什么USB转CAN的东西。所以我们在实验的时候需要有一个从正常模式切换至环回模式的过程。用环回模式去测试CAN是否好用。
CAN的一包只能发送最大8个字节,接收最大也是8个字节。
CAN我看了一遍,比较复杂的说,所以前面也只是简单写一下值得注意的地方,具体用到还是建议看一遍相关资料,并且再看一遍原子的实验说明。
具体实验过程、cubemx的配置请看原文链接
————————————————
版权声明:本文为CSDN博主「坛城」的原创**,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nianzhu2937/article/details/103957345 |