STM32 CAN知识总结

2023-05-16

STM32 CAN知识总结

一、CAN物理特性

can总线显性为0,隐形为1,类似线与的特点
在这里插入图片描述

二、CAN帧有五种:数据帧、远程帧、错误帧、过载帧、 帧间隔。其中数据帧最为常见

CAN数据帧结构上由7个段组成
在这里插入图片描述
CAN总线ACK应答机制:确认数据是否正常接收,所谓正常接收是指不含填充错误、格式错误、 CRC 错误。发送节点将此位为1,接收节点正常接收数据后将此位置为0;(1 bit)

三、帧仲裁

当多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送

四 、CAN过滤器

过滤器一共有4种工作模式:32位宽的掩码模式,32位宽的列表模式, 16位宽的列表模式,16位宽的掩码模式
在这里插入图片描述
以下代码为CAN过滤器设置代码例子:该例子只会接收ID为Can_Address的数据帧

    CAN_FilterInitStructure.CAN_FilterNumber=0; //过滤器0
    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;   //掩码模式
    CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;  //32位宽
    CAN_FilterInitStructure.CAN_FilterIdHigh=Can_Address<<5;    //验证码(ID)左移5为的原因是CAN_FilterIdHigh包含的是STD[0~10]和EXID[13~17],标准CAN ID首先应左移5位后才能对齐.EXID[13~17]是5位
    CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff;//都不屏蔽
    CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xffff;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0
    CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//激活过滤器0
    CAN_FilterInit(&CAN_FilterInitStructure);           //滤波器初始化

五 、CAN波特率

STM32单片机中CAN的波特率主要由4个参数共同决定。他们分别是重新同步跳跃时间单元(tsjw)、时间段1的时间单元(tbs1)、时间段2的时间单元(tbs2)、波特率分频器(brp)。对应到STM32单片机的库函数中,分别对应的是CAN_SJW、CAN_BS1(即tbs1+1)、CAN_BS2(即tbs2+1)、CAN_Prescaler等4个参数。库函数中只需完成这4个参数的设定即可。比如设置CAN_SJW=1tq,CAN_BS1=6tq,CAN_BS2=1tq,CANPrescaler=9,则波特率=36M/[(1+6+1)*9]=500Kbps。(APB1总线时钟(PCLK1)=36M)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32 CAN知识总结 的相关文章

随机推荐