stm32的can总线

  • STM32内置bxCAN外设(CAN控制器、拓展CAN),支持CAN2.0A和2.0B(全部的CAN),可以自动发送CAN报文和按照过滤器自动接收指定CAN报文,程序只需处理报文数据而无需关注总线的电平细节

  • 波特率最高可达1兆位/秒,高速CAN波特率为125K~1MBps,可支持高速CAN

  • 意思就是发送的时候有3个缓存区,可以存入3个待发报文,

  • 2个3级深度的接收FIFO,这是接收的缓存区,总共可以缓存2*3=6个报文

  • 14个过滤器组(互联型28个),看芯片是不是互联型,这个过滤器,就是用来过滤接收报文ID的,所有挂载在CAN总线的报文,都是广播发出来的,每个设备都能收到,各种报文都混杂在 起,都在总线上传输,但是对于某个特定的设备而言,它往往只需要接收部分ID的报文,这样我们就可以配置这个过滤器,让CAN外设,只接收我想要的报文,无关报文直接就过滤掉,这样就非常方便

  • STM32 CAN外设额外的一些特色功能:时间触发通信、自动离线恢复、自动唤醒、禁止自动重传、接收FIFO溢出处理方式可配置、发送优先级可配置、双CAN模式

一、CAN网拓扑结构

这里每个CAN节点都挂载在CAN总线上,对于其中一个CAN节点,都由CAN控制器和CAN收发器组成,CAN控制器一般集成在MCU,也就是单片机里面,然后STM32引出CAN_RX和CAN_TX引脚,与CAN收发器连接,之后CAN收发器引出CAN_High和CAN_LOW,与CAN总线相连

stm32的can就两个引脚CAN_RX、CAN_TX

二、CAN收发器电路

VCC供电必须接5V,不能接3.3V,因为协议规定,CAN_H引脚在显性电平时电压为3.5V,要是供电只有3.3V,那么CAN总线的电压,就没法符合规范了。

TXD和RXD,和左边的CAN控制器相连,T接T,R接R,不用交叉,这一点别和串口搞混了

SJA1000这个芯片,是一个独立的CAN控制器,比如如果你用一些低端的单片机,,它没有内置CAN控制器,那么就可以通过外置这个SJA1000,实现CAN通信

模块中间的R3是120Ω电阻,这个电阻就是终端电阻了,可以看到,这里每个收发器模块,自带的就有一个终端电阻,所以当两个模块相连时,正好是两个终端电阻,但是如果三个或更多模块相连,那么终端电阻就也会有3个或更多,这一点,不符合协议的要求,所以,当3个或更多收发器模块相连时,我们得把中间模块的终端电阻去掉,这才是符合协议的做法

三、STM32的CAN基本结构

发送邮箱有3个,每个邮箱可以存入一个CAN报文,如果我们想发出一个报文,那我们就把这个报文写入到其中一个空置邮箱,之后设置寄存器请求发送,就完事了,然后剩下的所有步骤,比如等待总线空闲,操作引脚输出波形,进行位同步和仲裁等等,这些步骤,全都由硬件电路自动执行,所以使用起来,其实非常简单。

接收部分的接收过滤器和2个FIFO,当CAN总线上出现一个数据帧或者遥控帧时,CAN硬件电路都会把这个报文缓存下来,至于是不是要保留这个报文,那得看它能不能通过过滤器,过滤器内,我们可以设置过滤规则,告诉硬件,我们想要什么ID的报文,如果硬件收到了这些旧的报文,就可以把它存入FIFO,如果收到的报文,无法通过任何一个过滤器,说明这个D的报文,我们并不需要,那硬件就直接就把它扔掉,别来烦我们,这样可以减轻软件的负担。然后,通过过滤器的报文会自动存入主接收FIFO 0或者主接收FIFO 1,FIFO的意思是先进先出寄存器,你也可以把它称为队列,通过过滤器的报文,要进队伍0或者队伍1里面排队,等待CPU读取,这里设计了两个队伍,每个队伍有3个邮箱,也就是最大存入3个报文,如果接收报文很快,CPU无法及时读走,那报文就可以在FIFO 0或者FIFO1里面排队,这样在一定程度上,可以避免报文丢失。

波特率计算

STM32中的位时序

计算出来的波特率一定要在高速或低速CAN总线的范围内,如果不在其范围内,则要调整。

相关推荐
朝饮坠露兮10 小时前
#浮动源 vs 共地源:模拟 IC 测试中的 VI 源架构详解
嵌入式硬件
安妮细水长流13 小时前
汽车电子面试问题记录
单片机
碎光拾影13 小时前
i.MX6ULL时钟系统配置指南
c语言·arm开发·嵌入式硬件
GeekArch13 小时前
第28讲:避坑——AI堆栈分配错误、栈溢出BUG
c语言·人工智能·stm32·mcu·学习·bug
wuyk55516 小时前
59.嵌入式C语言高级宏定义实战:多行宏、字符串化与符号拼接
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·51单片机
梅名智16 小时前
找不到libm.so, libc.so
嵌入式硬件
CPETW17 小时前
企业版配套软件介绍 ---- USB TO SPI 3.0-Slave
网络·科技·单片机·嵌入式硬件·电子
piaoyiren17 小时前
STM32 综合温控风扇控制系统
stm32·单片机·嵌入式硬件·oled·lcd1602·hc-05蓝牙
Echo_cy_19 小时前
基于ZYNQ-7000的Ethernet驱动配置
linux·驱动开发·嵌入式硬件·fpga开发·ethernet·zynq
武汉万象奥科19 小时前
万象奥科OpenHarmony 6.1 LTS适配完成,RK3576核心板再添新生态
arm开发·嵌入式硬件·物联网·rk3576·arm核心板