can节点如何设置c语言标识符符

君,已阅读到文档的结尾了呢~~
广告剩余8秒
文档加载中
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
CAN总线网络报文标识符编码研究
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口关于STM32F107
CAN总线问题的请教_stm32吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:23,567贴子:
关于STM32F107
CAN总线问题的请教收藏
你好,我想请教下STM32F107 里面CAN总线问题,这个问题困扰了我好久。项目里面有3个CAN节点,其中2个节点(假如标识符为0和1)需要同时向第三个节点(标识符701)发送数据,但是第三个节点只能接收到标识符为0的节点数据,1的数据接收不到。
但是如果两个节点分别向第三个节点发送数据是没有问题的。 第三块板的功能是将CAN收到的数据通过USB传给上位机,我是通过BUS-HOUND软件来抓包的。CAN总线不是有总线仲裁吗?先接收优先级较高节点的数据,然后接收优先级低节点的数据。均已设置为自动重发。
为什么会接收不到标识符为1节点的数据呢?程序如下:节点1程序如下:void CAN_Config(void){
/* CAN register init */
CAN_DeInit(CAN1);
CAN_StructInit(&CAN_InitStructure);
/* CAN1 cell init */
CAN_InitStructure.CAN_TTCM = DISABLE;
//禁止时间触发
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
//自动重传
CAN_InitStructure.CAN_RFLM = DISABLE;
//失能FIFO锁定模式
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_N
CAN_InitStructure.CAN_SJW = CAN_SJW_1
//500k波特率
CAN_InitStructure.CAN_BS1 = CAN_BS1_6
CAN_InitStructure.CAN_BS2 = CAN_BS2_1
CAN_InitStructure.CAN_Prescaler = 9;
CAN_Init(CAN1, &CAN_InitStructure);
/* CAN1 filter init */
CAN_FilterInitStructure.CAN_FilterNumber = 0;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdM
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32
CAN_FilterInitStructure.CAN_FilterIdHigh = 0xe020;
//通讯板11位标准标准符0x701
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);//使能指定的CAN中断
/*CAN发送数据格式配置*/
TxMessage.StdId =0;
TxMessage.ExtId = 0;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 8;}————————————————————————————————————————节点2程序如下:和节点1的相同,只是
TxMessage.StdId =1;————————————————————————————————————————节点3程序如下:void CAN_Config(void){
/* CAN register init */
CAN_DeInit(CAN2);
CAN_StructInit(&CAN_InitStructure);
/* CAN1 cell init */
CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
//自动重传
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;
CAN_InitStructure.CAN_Mode = CAN_Mode_N
CAN_InitStructure.CAN_SJW = CAN_SJW_1
//500K 波特率
CAN_InitStructure.CAN_BS1 = CAN_BS1_6
CAN_InitStructure.CAN_BS2 = CAN_BS2_1
CAN_InitStructure.CAN_Prescaler = 9;
CAN_Init(CAN2, &CAN_InitStructure);
/* CAN2 filter init */
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdM
//过滤一组标识符出来
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32
CAN_FilterInitStructure.CAN_FilterIdHigh =(((u32)0x0&&21)&0xffff0000)&&16;
//过滤标准数据帧
CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)0x0&&21)|CAN_ID_STD|CAN_RTR_DATA)&0
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);
TxMessage.StdId =0x701;
TxMessage.ExtId = 0;
TxMessage.RTR = CAN_RTR_DATA;
TxMessage.IDE = CAN_ID_STD;
TxMessage.DLC = 8;} 节点3CAN中断接收程序如下:void CAN2_RX0_IRQHandler(void)
//CAN中断处理函数{
//清空can接收缓存
CanRxMsg RxM
RxMessage.StdId=0x00;
RxMessage.ExtId=0x00;
RxMessage.IDE=0;
RxMessage.DLC=0;
RxMessage.FMI=0;
CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);if ((RxMessage.Data[0] =='F')&&(RxMessage.IDE == CAN_ID_STD))
Send_Buffer[0]=RxMessage.Data[0];
Send_Buffer[1]=RxMessage.Data[1];
Send_Buffer[2]=RxMessage.Data[2];
Send_Buffer[3]=RxMessage.Data[3];
Send_Buffer[4]=RxMessage.Data[4];
Send_Buffer[5]=RxMessage.Data[5];
Send_Buffer[6]=RxMessage.Data[6];
Send_Buffer[7]=RxMessage.Data[7];
USB_SIL_Write(EP1_IN, (uint8_t*)Send_Buffer, 8);
// 向USB写入数据
#ifndef STM32F10X_CL
SetEPTxValid(ENDP1);
Send_Update = 1;
上海洪庙文艺家具厂—专业实木家具定制厂家,设计制作一站式服务,省心放心!
遇到相同问题,没找到解决方法,你问题解决了没?
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或503 Service Temporarily Unavailable
503 Service Temporarily Unavailable
openresty/1.9.7.4

我要回帖

更多关于 c语言标识符 的文章

 

随机推荐