str710 can problem
Company  
ST Home | Microcontrollers

Index  »  ARM7 STR7  »  str710 can problem
     
   str710 can problem
 Moderated by :   »  AnisAS  -  coucou

Author
beginning argument    ( No reply )
jianfeng_2008   Posted 12-11-2008 at 04:19   



Registered on :
11-12-2009

Messages : 1

 OFF-Line

I hava designed a product with str710,but the can always crashed. Baud rate is 100K ,about 2 hours start error. It can send ok,but the other mcu dosn't received. I use the ST firmware. It is
u32 CAN_SendMessage(u32 msgobj, canmsg* pCanMsg)
{
while (CAN->sMsgObj[0].CRR & CAN_CRR_BUSY);

/* if (CAN->sMsgObj[0].COMR & CAN_CRQ_BUSY) */
/* return 0; // message interface 0 not free */

CAN->SR &= ~CAN_SR_TXOK;

/* read the Arbitration and Message Control */
CAN->sMsgObj[0].CMR = CAN_CMR_ARB | CAN_CMR_CONTROL;

CAN->sMsgObj[0].CRR = 1 + msgobj;

while (CAN->sMsgObj[0].CRR & CAN_CRR_BUSY);

/* update the contents needed for transmission */
CAN->sMsgObj[0].CMR = CAN_CMR_WRRD
| CAN_CMR_ARB
| CAN_CMR_CONTROL
| CAN_CMR_DATAA
| CAN_CMR_DATAB;

if ((CAN->sMsgObj[0].A2R & CAN_A2R_XTD) == 0)
{
/* standard ID */
CAN->sMsgObj[0].A1R = 0;
CAN->sMsgObj[0].A2R = (CAN->sMsgObj[0].A2R & 0xE000) | STD_FIXED_ID_ARB(pCanMsg->Id);
}
else
{
// extended ID
CAN->sMsgObj[0].A1R = EXT_FIXED_ID_ARB_L(pCanMsg->Id);
CAN->sMsgObj[0].A2R = (CAN->sMsgObj[0].A2R & 0xE000) | EXT_FIXED_ID_ARB_H(pCanMsg->Id);
}

CAN->sMsgObj[0].MCR = (CAN->sMsgObj[0].MCR & 0xFEF0) | CAN_MCR_NEWDAT | CAN_MCR_TXRQST | pCanMsg->Dlc;

CAN->sMsgObj[0].DA1R = ((u16)pCanMsg->Data[1]<<8) | pCanMsg->Data[0];
CAN->sMsgObj[0].DA2R = ((u16)pCanMsg->Data[3]<<8) | pCanMsg->Data[2];
CAN->sMsgObj[0].DB1R = ((u16)pCanMsg->Data[5]<<8) | pCanMsg->Data[4];
CAN->sMsgObj[0].DB2R = ((u16)pCanMsg->Data[7]<<8) | pCanMsg->Data[6];

CAN->sMsgObj[0].CRR = 1 + msgobj;
////////////////////////
CAN_SetRxMsgObj(CAN_RX_MSGOBJ, CAN_STD_ID, 0, CAN_LAST_STD_ID, TRUE);
//////////////////////

return 1;
}
Please help me!



 Profile   Quote  
On Top

Search in the forums
 
Jump To