新手入门
- 积分
- 5
- 金钱
- 5
- 注册时间
- 2016-4-23
- 在线时间
- 5 小时
|
7金钱
用的一个最小系统版加vp230模块作为接收方,另一个开发板作为发送方发送了一次数据后,发送第二次就接收不到了。
不过我将接收方换成另一个开发板就接受几次都没有问题?这是什么情况?
如果我用另一块开发板实验没问题的话那应该不是程序的问题啊?
但是如果是电路问题为什么第一次的数据能接收到呢?
部分程序如下
发送机:
void CAN_SetMsg1(void)
{
//TxMessage.StdId=0x00;
TxMessage.ExtId=0x1314; //使用的扩展ID
TxMessage.IDE=CAN_ID_EXT; //扩展模式
TxMessage.RTR=CAN_RTR_DATA; //发送的是数据
TxMessage.DLC=1; //数据长度为2字节
TxMessage.Data[0]=0xAB;
}
void CAN_SetMsg2(void)
{
//TxMessage.StdId=0x00;
TxMessage.ExtId=0x1314; //使用的扩展ID
TxMessage.IDE=CAN_ID_EXT; //扩展模式
TxMessage.RTR=CAN_RTR_DATA; //发送的是数据
TxMessage.DLC=1; //数据长度为2字节
TxMessage.Data[0]=0xCD;
}
void CAN_SetMsg3(void)
{
//TxMessage.StdId=0x00;
TxMessage.ExtId=0x1314; //使用的扩展ID
TxMessage.IDE=CAN_ID_EXT; //扩展模式
TxMessage.RTR=CAN_RTR_DATA; //发送的是数据
TxMessage.DLC=1; //数据长度为2字节
TxMessage.Data[0]=0x12;
}
int main(void)
{
/* 配置CAN模块 */
CAN_Config();
while(1)
{
/*设置要通过CAN发送的信息*/
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0)
{
delay(0xffff);
CAN_SetMsg1();
CAN_Transmit(CAN1, &TxMessage);
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0);
}
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13) == 0)
{
delay(0xffff);
CAN_SetMsg2();
CAN_Transmit(CAN1, &TxMessage);
while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_13)==0);
}
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) == 0)
{
delay(0xffff);
CAN_SetMsg3();
CAN_Transmit(CAN1, &TxMessage);
while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==0);
}
if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0)
{
delay(0xffff);
CAN_SetMsg4();
CAN_Transmit(CAN1, &TxMessage);
while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3)==0);
}
}
}
void CAN_SetMsg4(void)
{
//TxMessage.StdId=0x00;
TxMessage.ExtId=0x1314; //使用的扩展ID
TxMessage.IDE=CAN_ID_EXT; //扩展模式
TxMessage.RTR=CAN_RTR_DATA; //发送的是数据
TxMessage.DLC=1; //数据长度为2字节
TxMessage.Data[0]=0x34;
}
接收机:
void USB_LP_CAN1_RX0_IRQHandler(void)
{
CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
/* 比较是否是发送的数据和ID */
if((RxMessage.ExtId==0x1314) && (RxMessage.IDE==CAN_ID_EXT)
&& (RxMessage.DLC==1) && (RxMessage.Data[0]==0xAB))
{
flag = 0;
GPIO_SetBits(GPIOE, GPIO_Pin_0); //接收成功
}
else
{
flag = 0xff; //接收失败
}
if((RxMessage.ExtId==0x1314) && (RxMessage.IDE==CAN_ID_EXT)
&& (RxMessage.DLC==1) && (RxMessage.Data[0]==0xCD))
{
flag = 0;
GPIO_ResetBits(GPIOE, GPIO_Pin_0); //接收成功
}
else
{
flag = 0xff; //接收失败
}
if((RxMessage.ExtId==0x1314) && (RxMessage.IDE==CAN_ID_EXT)
&& (RxMessage.DLC==1) && (RxMessage.Data[0]==0x12))
{
flag = 0;
GPIO_SetBits(GPIOE, GPIO_Pin_0); //接收成功
}
else
{
flag = 0xff; //接收失败
}
if((RxMessage.ExtId==0x1314) && (RxMessage.IDE==CAN_ID_EXT)
&& (RxMessage.DLC==1) && (RxMessage.Data[0]==0x34))
{
flag = 0;
GPIO_ResetBits(GPIOE, GPIO_Pin_0); //接收成功
}
else
{
flag = 0xff; //接收失败
}
} |
|