[CAN-bus/DeviceNet] stm32 can多机通信

[复制链接]
4532|4
 楼主| ar_m_cu 发表于 2009-5-13 21:52 | 显示全部楼层 |阅读模式
软件环境&nbsp;IAR4.42+JLINK&nbsp;&nbsp;&nbsp;板子是自己参照万利的做得,用的是2.0的固件库<br /><br />仿真提示是&nbsp;主机发送错误&nbsp;&nbsp;不知是什么原因,各位老大帮忙看看<br /><br />主机程序主程序<br />int&nbsp;main(void)<br />{<br />&nbsp;CanTxMsg&nbsp;TxMessage;<br />&nbsp;u32&nbsp;i&nbsp;=&nbsp;0;<br />&nbsp;u8&nbsp;TransmitMailbox;<br />&nbsp;u8&nbsp;flag=1,Txflag=0;<br />&nbsp;<br />&nbsp;RCC_Configuration();<br />&nbsp;NVIC_Configuration();<br />&nbsp;GPIO_Configuration();<br />&nbsp;GPIO_SetBits(GPIOA,&nbsp;GPIO_Pin_3);<br />&nbsp;<br />&nbsp;do&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestRx&nbsp;=&nbsp;CAN_Polling();<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;while&nbsp;(TestRx&nbsp;==&nbsp;0);<br />&nbsp;<br />&nbsp;if(flag&nbsp;==&nbsp;1)<br />&nbsp;{<br />&nbsp;&nbsp;&nbsp;TxMessage.StdId=0x11;<br />&nbsp;&nbsp;&nbsp;TxMessage.RTR=CAN_RTR_REMOTE;<br />&nbsp;&nbsp;&nbsp;TxMessage.IDE=CAN_ID_STD;<br />&nbsp;&nbsp;&nbsp;TxMessage.DLC=2;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;TransmitMailbox=CAN_Transmit(&TxMessage);<br />&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;while((CAN_TransmitStatus(TransmitMailbox)&nbsp;!=&nbsp;CANTXOK)&nbsp;&&&nbsp;(i&nbsp;!=&nbsp;0xFF))<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;if(i&nbsp;==&nbsp;0xFF)&nbsp;Txflag&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;else&nbsp;Txflag&nbsp;=&nbsp;0;<br />&nbsp;}<br />&nbsp;<br />&nbsp;if(Txflag&nbsp;==&nbsp;1)&nbsp;GPIO_SetBits(GPIOA,&nbsp;GPIO_Pin_3);<br />&nbsp;else&nbsp;GPIO_ResetBits(GPIOA,&nbsp;GPIO_Pin_3);<br />&nbsp;while&nbsp;(1)&nbsp;<br />&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;}<br />}<br /><br />从机程序主程序<br />int&nbsp;main(void)<br />{<br />&nbsp;&nbsp;u32&nbsp;i&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;u8&nbsp;TransmitMailbox;<br />&nbsp;&nbsp;CanTxMsg&nbsp;TxMessage;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;System&nbsp;Clocks&nbsp;Configuration&nbsp;*/<br />&nbsp;&nbsp;RCC_Configuration();<br />&nbsp;&nbsp;/*&nbsp;NVIC&nbsp;Configuration&nbsp;*/<br />&nbsp;&nbsp;NVIC_Configuration();<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;/*&nbsp;GPIO&nbsp;ports&nbsp;pins&nbsp;Configuration&nbsp;*/<br />&nbsp;&nbsp;GPIO_Configuration();<br />&nbsp;&nbsp;GPIO_SetBits(GPIOA,&nbsp;GPIO_Pin_3);<br />&nbsp;&nbsp;do&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestRx&nbsp;=&nbsp;CAN_Polling();<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;while&nbsp;(TestRx&nbsp;==&nbsp;0);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;while&nbsp;(1)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(RxMessage.RTR&nbsp;==&nbsp;CAN_RTR_REMOTE)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RxMessage.RTR&nbsp;=&nbsp;CAN_RTR_DATA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.StdId&nbsp;=&nbsp;RxMessage.StdId;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.RTR&nbsp;=&nbsp;CAN_RTR_DATA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.IDE&nbsp;=&nbsp;RxMessage.IDE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.DLC&nbsp;=&nbsp;RxMessage.DLC;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.Data[0]=0xCA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.Data[1]=0xFE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.Data[2]=0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.Data[3]=0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.Data[4]=0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.Data[5]=0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.Data[6]=0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TxMessage.Data[7]=0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TransmitMailbox=CAN_Transmit(&TxMessage);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while((CAN_TransmitStatus(TransmitMailbox)&nbsp;!=&nbsp;CANTXOK)&nbsp;&&&nbsp;(i&nbsp;!=&nbsp;0xFF))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}//if<br />&nbsp;&nbsp;}//while<br />}<br /><br />CAN初始化函数为<br />TestStatus&nbsp;CAN_Polling(void)<br />{&nbsp;u8&nbsp;Error;<br />&nbsp;&nbsp;CAN_InitTypeDef&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CAN_InitStructure;<br />&nbsp;&nbsp;CAN_FilterInitTypeDef&nbsp;&nbsp;CAN_FilterInitStructure;<br />&nbsp;&nbsp;/*&nbsp;CAN&nbsp;register&nbsp;init&nbsp;*/<br />&nbsp;&nbsp;CAN_DeInit();<br />&nbsp;&nbsp;CAN_StructInit(&CAN_InitStructure);<br />&nbsp;&nbsp;/*&nbsp;CAN&nbsp;cell&nbsp;init&nbsp;*/<br />&nbsp;&nbsp;CAN_InitStructure.CAN_TTCM=DISABLE;<br />&nbsp;&nbsp;CAN_InitStructure.CAN_ABOM=DISABLE;<br />&nbsp;&nbsp;CAN_InitStructure.CAN_AWUM=DISABLE;<br />&nbsp;&nbsp;CAN_InitStructure.CAN_NART=DISABLE;<br />&nbsp;&nbsp;CAN_InitStructure.CAN_RFLM=DISABLE;<br />&nbsp;&nbsp;CAN_InitStructure.CAN_TXFP=DISABLE;<br />&nbsp;&nbsp;CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;<br />&nbsp;&nbsp;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;<br />&nbsp;&nbsp;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;<br />&nbsp;&nbsp;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;<br />&nbsp;&nbsp;CAN_InitStructure.CAN_Prescaler=5;<br />&nbsp;&nbsp;Error&nbsp;=&nbsp;CAN_Init(&CAN_InitStructure);<br />&nbsp;&nbsp;if&nbsp;(Error&nbsp;==&nbsp;0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;FAILED;<br />&nbsp;&nbsp;/*&nbsp;CAN&nbsp;filter&nbsp;init&nbsp;*/<br />&nbsp;&nbsp;CAN_FilterInitStructure.CAN_FilterNumber=0;<br />&nbsp;&nbsp;CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;<br />&nbsp;&nbsp;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit;<br />&nbsp;&nbsp;CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;<br />&nbsp;&nbsp;CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;<br />&nbsp;&nbsp;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;<br />&nbsp;&nbsp;CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;<br />&nbsp;&nbsp;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;<br />&nbsp;&nbsp;CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;<br />&nbsp;&nbsp;CAN_FilterInit(&CAN_FilterInitStructure);<br />&nbsp;&nbsp;CAN_ITConfig(CAN_IT_FMP0,&nbsp;ENABLE);<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;return&nbsp;PASSED;<br />}<br />
 楼主| ar_m_cu 发表于 2009-5-14 08:07 | 显示全部楼层

急&nbsp;啊&nbsp;&nbsp;!有人知道原因吗?
georgekin203 发表于 2009-5-14 10:09 | 显示全部楼层

can总线要两个节点才能调试

一个节点肯定出错
 楼主| ar_m_cu 发表于 2009-5-14 15:04 | 显示全部楼层

是俩节点啊

我用了两块一样的板子,终端电阻也加了,自测试的时候也通过了。
 楼主| ar_m_cu 发表于 2009-5-15 09:51 | 显示全部楼层

终于调试成功

经过长时间的努力,终于调试成功,原来是中断的原因!哈哈&nbsp;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

1200

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部