目标实验平台:stm32f4-discovery,板载STM32F407VGT6。 写的时候忘记掉可以用“报文”这个词,于是就很愚昧的都使用了一帧信息这样的表达。。意思是一样的! 这里首先说一下CAN总线。 CAN总线时一种工业总线,展开来说就是控制器局域网,Controller Area Network 常常用在汽车和工业控制的通讯中。也就是说,在汽车上,各种控制器常常是通过CAN总线进行通讯的。 具体到他是谁发明的有什么历史就不详述了,百度百科一大堆我自己看了也记不清~ 只是这两天在调两个STM32通过CAN总线进行最简单的收发通信,这里就简要介绍一下其通信的建立过程 也就是简单的收发功能,至于其中更复杂的错误检测等功能我也只看过介绍没有具体实验过,也就不说了。 如果能有机会用到,也会来再记录的。
CAN总线和I2c等总线有所不同,各个节点的通信并不是通过确定发送目标机地址来确定收发方向。 他是采取一种广播的方式,也就是说一个节点向总线发送信号,所有节点都能收到。 但是如果这个信号对自己无用怎么办呢?事实上,在CAN总线上传输的信号并不仅仅只有所需要的数据、控制信号等, 更重要的是一帧信号还有一串标识符ID,每个节点可以设置自己想要接收什么样标识符的信息 而将不需要的信息通过节点中的过滤器处理掉,就不用担心无用数据的干扰了。这样比需要地址总线通讯方式的好处就是如果同样信息不需要一个一个地址重复发送,只要一次发送就行了,提高效率。
在一个CAN的节点上,除了CPU以外,还需要一个CAN控制器和一个CAN收发器,CAN控制器可以根据当前总线上的数据传输情况以及现在控制器中发送邮箱及接受缓冲器等的情况来实时调整发送和接收。而CAN总线上的电平并不是TTL电平故需要一个CAN收发器进行电平转换的功能。
|