CAN概念
全称Controller Area Network,是一种半双工,异步通讯。
物理层:
闭环:允许总线最长40m,最高速1Mbps,规定总线两端各有一个120Ω电阻,闭环
开环:最大传输距离1Km,最高速125Kbps,规定每根线串联一个2.2kΩ的电阻,开环
CAN协议基本特点
基本特点如下:
可多主控制: 当CAN总线空闲时,所有在总线上的终端都可以发送报文,根据标识符(CAN ID)决定优先级,当总线上有两个以上的终端发送消息时,对各消息CAN ID的每个位进行逐个仲裁比较。CAN ID值越低,报文优先级越高速度快,距离远:CAN 协议最快可达1Mbps(距离小于40m),最远可达10KM(速率小于 5Kbps)
CAN 帧种类:CAN 通信中包含五种帧种类,数据帧、遥控帧、错误帧、过载帧、间隔帧。其中最重要的是数据帧,用于通讯节点向外传送数据。数据帧中有数据段,用于承载数据的内容,一帧可发送0~8个字节的数据,MSB先行。
显性电平对应“0”,隐性电平对应“1”。隐性电平(1)两条线电压都是2.5V,即压差为0;显性电平(0)CAN_High和CAN_Low分别为3.5V和1.5V,压差为2V。
总线上,只要有一个节点输出显性,则总线上为显性电平;只有所有节点都是隐性电平,总线才为隐性电平
can模式介绍
CAN波特率计算小工具
STM32 CAN Baud Rate CalculatorV1.0
STM32的CAN通信波特率计算器
关于采样点
1 什么是采样点 采样点是节点判断信号逻辑电平的位置,是CAN控制器读取总线电平,并解释各个比特的逻辑值的时间点。
2 为什么需要采样点
合适的采样点位置是CAN控制器正常通信的保证。对于CAN网络这个整体而言,多个节点要尽量保持同一个采样点。若网络中节点采样点不一致可能会导致同样的采样频率出现采样错误,进而使整个网络出现故障。
物理层介绍
cubemx 配置
- 配置系统时钟
- 配置调试烧录接口
- can配置
配置波特率为250Kbps
打开接收中断
代码部分
can 滤波器配置和can初始化
void CAN_Config(void)
{
CAN_FilterTypeDef sFilterConfig;
/*配置can滤波器*/
sFilterConfig.FilterBank = 0; //过滤器0
sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.FilterIdHigh = 0x0000; //32位ID
sFilterConfig.FilterIdLow = 0x0000;
sFilterConfig.FilterMa