本帖最后由 yesiqiu 于 2018-10-15 22:19 编辑
手把手教你学STM32的CAN通信(一) 写在前面
CAN是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。由德国电气商博世公司在1986 年率先提出。此后,CAN 通过ISO11898 及ISO11519进行了标准化。现在在欧洲已是汽车网络的标准协议。 CAN具有很高的可靠性,广泛应用于:汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。 本次实验
本次实验的效果 本次实验我们将实现的功能是通过STM32的CAN通信自发自收8个字节的数据,在将收到的数据在串口调试助手上打印出来。 硬件连接 首先我们看一下硬件连接 CAN收发器 上图中U4是一个CAN收发器就是一个转换芯片,它的主要功能是将CAN控制器的TTL信号转换成CAN总线的差分信号。 CAN控制器TTL信号 现在的CAN控制器一般都与MCU集成在一起,其发送和接收TTL信号就是MCU引脚(高或低)信号。 CAN收发器的差分信号 如上图所示,CAN 接收器根据CAN_L和CAN_H上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。 显性电平对应逻辑:0 CAN_H和CAN_L之差为2V左右。 隐性电平对应逻辑:1 CAN_H和CAN_L之差为0V。 显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。另外,在CAN总线的起止端都有一个120Ω的终端电阻,来做阻抗匹配,以减少回波反射。 上图中CAN总线上传输的是差分信号,CAN收发器实现差分信号和TTL信号的转换。单片机的CAN控制器接收和发送的是TTL信号。 CAN总线上挂有多个节点,所有节点的框图和节点1类似。 本次的实验中我们用的是STM32单片机CAN控制器的测试模式中的环回模式。
如图所示,就是CAN控制器可以发送信号到CAN总线,但是不接收CAN总线上的信号,但是可以从控制器内部接收发出的信号。这种模式下只需要一个单片机即可实现CAN通信,同时可以从TX引脚上看到信号的波形。
先发实验的代码吧,内容慢慢更新 |