STM32STM32STM32STM32CANCANCANCAN发送和接收过滤原理通过对CANBUS协议的理解,我们知道:CAN总线上的节点接收或发送数据都是以帧为单位的!!!CAN协议规定了好几种帧类型,但是对于我们应用来说,只有数据帧和远程帧可以通过软件编程来控制。(其他几种帧都是由CAN控制器硬件实现的,我们想管也管不了)。而数据帧和远程帧最大的区别在于:远程帧没有数据域。数据帧分为标准数据帧和扩展数据帧,它们之间最大的区别在于:标识符(ID)长度不同(标准帧为11位,扩展帧为29位)。为了能更好地理解下面的内容,让我们先来回忆一下标准数据帧是什么样子的:我们首先来看发送:前面已经强调了CAN总线上的节点接收或者发送数据都是以帧为单位。假如我们要发送一个字节的数据:0x5A,是不是像串口发送数据那样,直接把0x5A写入发送缓冲寄存器,然后发送就可以了呢?NO!刚才已经强调了,CAN总线上的数据都是以帧为单位的!!!我们必须按照帧的格式填充它!TNND,这么复杂?没关系,ST库函数已经提供了一个结构,我们只需要填充该结构就可以了。我们来看一下这个结构的样子:typedefstruct{uint32_tStdId;//标准帧ID,如果您要发送扩展帧。可以不管它uint32_tExtId;//扩展帧ID,如果您要发送标准帧。可以不管它uint8_tIDE;//您是想发送标准帧还是扩展帧?uint8_tRTR;//您是想发送数据帧还是远程帧?uint8_tDLC;//您想发送数据的长度。uint8_tData[8];//您想要发送的数据。}CanTxMsg;StdIdStdIdStdIdStdIdStdId用来设定标准标识符。它的取值范围为0到0x7FF。ExtIdExtIdExtIdExtIdExtId用来设定扩展标识符。它的取值范围为0到0x1FFFFFFF。IDEIDEIDEIDEIDE用来设定消息标识符的类型。IDEIDEIDEIDE值IDEIDEIDEIDE描述CAN_Id_Standard使用标准标识符CAN_Id_Extended使用扩展标识符北极星电子:http://shop100838061.taobao.com/http://shop100838061.taobao.com/http://shop100838061.taobao.com/http://shop100838061.taobao.com/提供USBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CANUSBCAN/PCICAN/CAN协议分析仪等CANCANCANCANBUSBUSBUSBUS相关产品RTRRTRRTRRTRRTR用来设定待传输消息的帧类型。它可以设置为数据帧或者远程帧。RTRRTRRTRRTR值RTRRTRRTRRTR描述CAN_RTR_Data数据帧CAN_RTR_Remote远程帧DLCDLCDLCDLCDLC用来设定待传输消息的帧长度。它的取值范围是0到0x8。Data[8]Data[8]Data[8]Data[8]Data[8]包含了待传输数据,它的取值范围为0到0xFF。先...