can接口相对是一种常用的串行接口,但是不像spi、i2c、uart等接口都有主从的关系,can可以任何一个节点主动发送数据,并且假如出现总线冲突会有硬件来处理。
can和rs485又有些类似,都是把ttl信号转换成了差分信号。所以在stm32 使用can的时候会有一个can收发器。
从电路上看起来也很简单,stm32也是通过can tx、rx两根线和收发器相连。所以假如我们要测试can的发送,是不是只接can tx脚就可以了?
我最开始也以为这样就可以,但是深究can的总线冲突检测原理就会发现这样行不通的。因为can 在发送数据的时候也会同时接收发送的数据,通过把接收的数据和内部发送寄存器的数据做对比,是不是一致就知道总线有没有冲突。所以在正常情况(这里意味着非正常情况下也可以)下can rx不接就到这发送出去的数据无法收到从而硬件自动判断为发送失败。
所以要保证发送数据成功,can tx脚和can rx脚要都接上,并且确保can收发器供电正常。
硬件上就这些主要注意点,接下来就主要是软件的配置了。
一般stm32 配置can有以下几大步骤:
- can的初始化(cubemx直接可以生成代码)
- can的启动
- can滤波器的设置(用来接收的,发送的时候可以不用配置它)
- can执行发送数据请求
我们只测试can的发送,所