STM32的CAN总线+J1939数据格式说明

上传人:工**** 文档编号:506645799 上传时间:2022-11-15 格式:DOCX 页数:3 大小:72.25KB
返回 下载 相关 举报
STM32的CAN总线+J1939数据格式说明_第1页
第1页 / 共3页
STM32的CAN总线+J1939数据格式说明_第2页
第2页 / 共3页
STM32的CAN总线+J1939数据格式说明_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《STM32的CAN总线+J1939数据格式说明》由会员分享,可在线阅读,更多相关《STM32的CAN总线+J1939数据格式说明(3页珍藏版)》请在金锄头文库上搜索。

1、在 STM32 中都是有标准的数据结构和函数供大家使用,那么对于具体的每一部分对应那些 数据、每一位代表什么意思都没有具体说明。特别在使用某些协议,需要辨别该部分的具体 信息时,就必须对数据结构中的每位的意义清楚才能提取出具体的含义。先来看一下下面的 东西吧。CAN 帧结构。5格式-JS IFjRIR1 DE-r 10DUGY 0F】便标识神SRRlD ER TRr,1r0-DLC这个就不具体介绍了,不过先提一点疑问:在STM32中直接给结构体中各成员直接赋值或读取,那么其实际的发送或接收的最底层的结构又是怎么样的呢?typedef structuint32_t StdId;uint32_t

2、ExtId;uint8_t IDE; uint8_t RTR; uint8_t DLC;uint8_t Data8;uint8_t FMI; CanRxMsg;接受结构体和发送结构体一样,就只是结构体名不一样而已(CanTxMsg)。对于上面的问题,在一些协议中进行解析时,如何将这些标识符与协议的具体项对应呢? 由于在做J1939协议的编程,所以就以这个为例说明一下。标符1位标念符18SOI;优先级RDPPDU格式(.PFSRRI DIPl;VU1PLOP游地址12 4567-12131415-16J7 2425 32如上所示,在J1939中CAN帧结构为32位,包含优先级、PDU格式(PF)

3、、PS、SA。而 在STM32的结构体中却是32位的ID,8位的IDE、RTR、DLC。如果要单独提取标识符中的 某一个有如何提取呢?这就涉及到STM32的收发邮箱的寄存器存储结构了。来看一下其标识符寄存器结构吧 (接收和发送寄存器结构除0 位外都一样)位名称说明31: 21STID10:0标准标识符或扩展标识符的 咼字节20: 3EXID17:0扩展标识符扩展帧标识的低 字节2IDE0:使用标准标识符1:使用扩展标识符1RTR0:数据帧1:远程帧0TXRQ(发送)/保留(接受)发送数据请求/保留对于J1939协议来说,必须对帧数据和优先级、PF、PS、SA进行双向解析。所以我们在发 送数据或

4、收到数据时必须做一定的处理。在STM32的固件库函数中该寄存器中的各个部分 的值提取出来赋给其结构体中个部分的值。发送数据时:u32 Id_Ext = 0x00000000;Id_Ext=Id_Ext|Priority16)|Pdu_PF)8)|Pdu_Ps)16;PDU_PS= (RxMessage.ExtId&0x0000ff00)8;PDU_SA= RxMessage.ExtId&0x000000FF;注意:在帧结构图中我们看到PF被分成了两部分,而在上面的处理中PF却是连在一起的8 位。这又是怎么回事呢?这就要归结为Extld这个结构体成员的具体形式了。3130292827262524

5、23222120191817160无效位优先级3位R(0)DP(0)PF1514131211109876543210PSSA我想通过这个Extld数据位结构的说明,对于如何对帧数据和优先级、PF、PS、SA进行双向 解析有了比较清楚的认识了吧。大家可以结合下面这个STM32中的函数对比着看更容易理解。void CAN_Receive(CAN_TypeDef* CANx, uint8_t FlFONumber, CanRxMsg* RxMessage)/* Check the parameters */ assert_param(lS_CAN_ALL_PERlPH(CANx); assert_p

6、aram(lS_CAN_FlFO(FlFONumber);/* Get the ld */RxMessage-lDE = (uint8_t)0x04 & CANx-sFlFOMailBoxFlFONumber.RlR;if (RxMessage-lDE = CAN_lD_STD)RxMessage-StdId = (uint32_t)0x000007FF & (CANx-sFIFOMailBoxFIFONumber.RIR 21); elseRxMessage-ExtId = (uint32_t)0x1FFFFFFF & (CANx-sFIFOMailBoxFIFONumber.RIR 3);

7、 RxMessage-RTR = (uint8_t)0x02 & CANx-sFIFOMailBoxFIFONumber.RIR;/* Get the DLC */RxMessage-DLC = (uint8_t)0x0F & CANx-sFIFOMailBoxFIFONumber.RDTR;/* Get the FMI */RxMessage-FMI = (uint8_t)0xFF & (CANx-sFIFOMailBoxFIFONumber.RDTR 8);/* Get the data field */RxMessage-Data0 = (uint8_t)0xFF & CANx-sFIF

8、OMailBoxFIFONumber.RDLR;RxMessage-Data1 = (uint8_t)0xFF & (CANx-sFIFOMailBoxFIFONumber.RDLR 8);RxMessage-Data2 = (uint8_t)0xFF & (CANx-sFIFOMailBoxFIFONumber.RDLR 16);RxMessage-Data3 = (uint8_t)0xFF & (CANx-sFIFOMailBoxFIFONumber.RDLR 24);RxMessage-Data4 = (uint8_t)0xFF & CANx-sFIFOMailBoxFIFONumber.RDHR;RxMessage-Data5 = (uint8_t)0xFF & (CANx-sFIFOMailBoxFIFONumber.RDHR 8);RxMessage-Data6 = (uint8_t)0xFF & (CANx-sFIFOMailBoxFIFONumber.RDHR 16);RxMessage-Data7 = (uint8_t)0xFF & (CANx-sFIFOMailBoxFIFONumber.RDHR 24); /* Release the FIFO */CAN_FIFORelease(CANx, FIFONumber);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号