完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
把代码贴出来啊,不要弄成附件
|
|
|
|
关键是代码太多了!!! 我试试吧!!! 节点2 /*CAN 过滤器设置 */ CAN_FilterInitStructure.CAN_FilterNumber=1;//指定待初始化的过滤器0 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //标识符屏蔽位模式 CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//过滤器位宽为1个32位过滤器 //用来设定过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个) CAN_FilterInitStructure.CAN_FilterIdHigh = 0x9104; //用来设定过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个 CAN_FilterInitStructure.CAN_FilterIdLow =0; //用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个 CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF; //用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个 CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFC; //可接收数据帧,也可接收远程帧 u32 i = 0; u8 TransmitMailbox = 0; TxMessage.StdId = 0x11;// 设定标准标识符,范围为0 to 0x7FF TxMessage.IDE=CAN_ID_STD;//标准标识符 TxMessage.RTR=CAN_RTR_DATA;//设定待传输消息的帧类型:数据帧 TxMessage.DLC=2; //设定待传输消息的帧长度 TxMessage.Data[0]=0x01;//待传数据 0xca TxMessage.Data[1]=0x08; TransmitMailbox = CAN_Transmit(CAN1,&TxMessage);//开始一个消息的传输 i = 0; 节点1 CAN_FilterInitStructure.CAN_FilterNumber=0;//指定待初始化的过滤器0 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //标识符屏蔽位模式 CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//过滤器位宽为1个32位过滤器 //用来设定过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个) CAN_FilterInitStructure.CAN_FilterIdHigh = CAN_ID; //0x0108 //用来设定过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个 CAN_FilterInitStructure.CAN_FilterIdLow = 0; //用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其高段位,16位位宽时为第一个 CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF; //用来设定过滤器屏蔽标识符或者过滤器标识符(32位位宽时为其低段位,16位位宽时为第二个 CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFC;//可接收数据帧,也可接收远程帧 void R_SendCan() { u32 i = 0; u8 TransmitMailbox = 0; TxMessage.StdId =0x11;// 设定标准标识符 TxMessage.IDE=CAN_ID_STD;//标准标识符 TxMessage.RTR=CAN_RTR_DATA;//设定待传输消息的为数据帧 TxMessage.DLC=2; //设定待传输消息的帧长度 TxMessage.Data[0]=0x91;//待传数据 0xca TxMessage.Data[1]=0x04; TransmitMailbox = CAN_Transmit(CAN1,&TxMessage);//开始一个消息的传输 i = 0; while((CAN_TransmitStatus(CAN1,TransmitMailbox)!=CANTXOK)&&(i!=0xFF))//通过检查CANTXOK位来确认发送是否成功 { i++; }
|
|
|
|
|
|
|
|
看看支持一下,我最近也在搞CAN总线
|
|
|
|
最近也在学CAN,看看
|
|
|
|
|
|
|
|
不知道楼主的问题解决了没,我也遇到一个问题,
uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage) { uint8_t transmit_mailbox = 0; /* Check the parameters */ assert_param(IS_CAN_ALL_PERIPH(CANx)); assert_param(IS_CAN_IDTYPE(TxMessage->IDE)); assert_param(IS_CAN_RTR(TxMessage->RTR)); assert_param(IS_CAN_DLC(TxMessage->DLC)); /* Select one empty transmit mailbox */ if ((CANx->TSR&CAN_TSR_TME0) == CAN_TSR_TME0) { transmit_mailbox = 0; } else if ((CANx->TSR&CAN_TSR_TME1) == CAN_TSR_TME1) { transmit_mailbox = 1; } else if ((CANx->TSR&CAN_TSR_TME2) == CAN_TSR_TME2) { transmit_mailbox = 2; } else { transmit_mailbox = CAN_TxStatus_NoMailBox; } if (transmit_mailbox != CAN_TxStatus_NoMailBox) { /* Set up the Id */ CANx->sTxMailBox[transmit_mailbox].TIR &= TMIDxR_TXRQ; if (TxMessage->IDE == CAN_Id_Standard) { assert_param(IS_CAN_STDID(TxMessage->StdId)); CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->StdId << 21) | TxMessage->RTR); } else { assert_param(IS_CAN_EXTID(TxMessage->ExtId)); CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | TxMessage->IDE | TxMessage->RTR); } /* Set up the DLC */ TxMessage->DLC &= (uint8_t)0x0000000F; CANx->sTxMailBox[transmit_mailbox].TDTR &= (uint32_t)0xFFFFFFF0; CANx->sTxMailBox[transmit_mailbox].TDTR |= TxMessage->DLC; /* Set up the data field */ CANx->sTxMailBox[transmit_mailbox].TDLR = (((uint32_t)TxMessage->Data[3] << 24) | ((uint32_t)TxMessage->Data[2] << 16) | ((uint32_t)TxMessage->Data[1] << 8) | ((uint32_t)TxMessage->Data[0])); CANx->sTxMailBox[transmit_mailbox].TDHR = (((uint32_t)TxMessage->Data[7] << 24) | ((uint32_t)TxMessage->Data[6] << 16) | ((uint32_t)TxMessage->Data[5] << 8) | ((uint32_t)TxMessage->Data[4])); /* Request transmission */ CANx->sTxMailBox[transmit_mailbox].TIR |= TMIDxR_TXRQ; } return transmit_mailbox; } 我接了一个周立功USBCAN作为节点,CAN发送里面transmit_mailbox会从0,1,2变到4,是怎么回事?transmit_mailbox为4后if (transmit_mailbox != CAN_TxStatus_NoMailBox)不成立,发送指令不执行 |
|
|
|
群号:517584671。本群致力于为行业内个人是提供技术交流平台,帮助业内人士学习汽车CAN总线技术。组织CAN总线新手,参与CAN总线知识培训。业内人士在CAN总线开发过程中遇到问题,本群可以给予技术支持。
|
|
|
|
好吧,加群看能不能学到什么,加油顶一下
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
199 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
748 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1122 浏览 0 评论
874 浏览 0 评论
910 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11835 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 13:07 , Processed in 0.620438 second(s), Total 59, Slave 50 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号