CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags); ERROR

Post Reply
Author
Message
lglgang
Posts: 40
Joined: 03 May 2013 04:07

CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags); ERROR

#1 Post by lglgang » 04 Nov 2020 08:08

RxTx_Data[1]=0X31;
CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);
RxTx_Data[1]=0X32;
CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);
RxTx_Data[1]=0X33;
CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);
RxTx_Data[1]=0X34;
CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);
WE CAN NOT RECEIVE different data from data.

When I edit the RxTx_Data[1]
but we recieive the data through CAN BUS.
the data is not changed.


Why?

lglgang
Posts: 40
Joined: 03 May 2013 04:07

Re: CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags); ERROR

#2 Post by lglgang » 04 Nov 2020 08:48

Code: Select all

sbit KKEY1 at GPIOE_IDR.B0;
sbit KKEY2 at GPIOE_IDR.B2;

sbit KOUT1 at GPIOE_ODR.B4;

unsigned long Can_Init_Flags;
unsigned char Can_Send_Flags, Can_Rcv_Flags; // can flags
unsigned char tx_flags;
unsigned char Rx_Data_Len;                                   // received data length in bytes
volatile char RxTx_Data[8];                                           // can rx/tx data buffer
volatile char RxTx_Data1[8];
char Msg_Rcvd;                                               // reception flag
long ID_1st = 12111, ID_2nd = 3;                       // node IDs
long Rx_ID;
unsigned int flag1;
unsigned int count1;
unsigned char flag_send1;
unsigned char flag_send2;
/*Place/Copy this part in declaration section*/
const unsigned int SJW = 1;
const unsigned int BRP = 4;
const unsigned int PHSEG1 = 5;
const unsigned int PHSEG2 = 2;
const unsigned int PROPSEG = 8;
const unsigned int CAN_CONFIG_FLAGS =
        _CAN_CONFIG_AUTOMATIC_RETRANSMISSION &
        _CAN_CONFIG_RX_FIFO_NOT_LOCKED_ON_OVERRUN &
        _CAN_CONFIG_TIME_TRIGGERED_MODE_DISABLED &
        _CAN_CONFIG_TX_FIFO_PRIORITY_BY_IDINTIFIER &
        _CAN_CONFIG_WAKE_UP;
void can_write(void)
{
  CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);
}

void init_all(void)
{

 /*Place/Copy this part in init section*/
CAN1InitializeAdvanced(SJW, BRP, PHSEG1, PHSEG2, PROPSEG, CAN_CONFIG_FLAGS, &_GPIO_MODULE_CAN1_PA11_12);

  CAN1SetOperationMode(_CAN_OperatingMode_Initialization);                    // set CONFIGURATION mode
  CANSetFilterScale32(0, _CAN_FILTER_ENABLED & _CAN_FILTER_ID_MASK_MODE & _CAN_FILTER_XTD_MSG, ID_1st, -1);

  CAN1SetOperationMode(_CAN_OperatingMode_Normal);               // set NORMAL mode

  //Can_Send_Flags = _CAN_TX_STD_FRAME & _CAN_TX_NO_RTR_FRAME;

    Can_Send_Flags = _CAN_TX_XTD_FRAME &                      //     with CANWrite
                   _CAN_TX_NO_RTR_FRAME;
}

void can_write1(void)
{
//init_all();
//Can_Send_Flags = _CAN_TX_XTD_FRAME & _CAN_TX_NO_RTR_FRAME;
CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);


}

void main() {

   GPIO_Digital_Input(&GPIOE_BASE, _GPIO_PINMASK_0);
 GPIO_Digital_Input(&GPIOE_BASE, _GPIO_PINMASK_2);
 GPIO_Digital_Output(&GPIOE_BASE, _GPIO_PINMASK_4);

 init_all();
  while (1) {


  if(KKEY1==0)
  {
     KOUT1=0;
     RxTx_Data[0]=0x39;
 RxTx_Data[1]=0x39;
 RxTx_Data[2]=0x39;
 RxTx_Data[3]=0x39;
 RxTx_Data[4]=0x39;
 RxTx_Data[5]=0x39;
 RxTx_Data[6]=0x39;
 RxTx_Data[7]=0x39;
 //can_write();
   // CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);
    //Delay_ms(50);
    //init_all();
     }
    if(KKEY1==1)
  {
      KOUT1=1;
       RxTx_Data[0]=0x30;
 RxTx_Data[1]=0x30;
 RxTx_Data[2]=0x30;
 RxTx_Data[3]=0x30;
 RxTx_Data[4]=0x30;
 RxTx_Data[5]=0x30;
 RxTx_Data[6]=0x30;
 RxTx_Data[7]=0x30;
 //can_write1();

    // CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);
      //Delay_ms(50);
     }
        //can_write();
      can_write1();

 }
  }
We can see that KOUT1=1; and KOUT1=0 is ok
but the data receive from CAN is not change .

When we reset the mcu(stm32f103ze) , then we find that the data in CAN is changed.

when we change the KKEY1 and watch the data in CAN, the data is not change anything.

if we reset the mcu, and the data is changed.

I want to know that , it is ok?
or there are some bugs or error in the code, Can anybody friends help me ?

lglgang
Posts: 40
Joined: 03 May 2013 04:07

Re: CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags); ERROR

#3 Post by lglgang » 04 Nov 2020 09:54

Code: Select all

sbit KKEY1 at GPIOE_IDR.B0;
sbit KKEY2 at GPIOE_IDR.B2;

sbit KOUT1 at GPIOE_ODR.B4;

unsigned char flag1,flag2;
unsigned long Can_Init_Flags;
unsigned char Can_Send_Flags, Can_Rcv_Flags; // can flags
unsigned char tx_flags;
unsigned char Rx_Data_Len;                                   // received data length in bytes
volatile char RxTx_Data[8];                                           // can rx/tx data buffer
volatile char RxTx_Data1[8];
char Msg_Rcvd;                                               // reception flag
long ID_1st = 12111, ID_2nd = 3;                       // node IDs
long Rx_ID;
/*Place/Copy this part in declaration section*/
const unsigned int SJW = 1;
const unsigned int BRP = 4;
const unsigned int PHSEG1 = 5;
const unsigned int PHSEG2 = 2;
const unsigned int PROPSEG = 8;
const unsigned int CAN_CONFIG_FLAGS =
        _CAN_CONFIG_AUTOMATIC_RETRANSMISSION &
        _CAN_CONFIG_RX_FIFO_NOT_LOCKED_ON_OVERRUN &
        _CAN_CONFIG_TIME_TRIGGERED_MODE_DISABLED &
        _CAN_CONFIG_TX_FIFO_PRIORITY_BY_IDINTIFIER &
        _CAN_CONFIG_WAKE_UP;
void can_write(void)
{
  CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);
}

void init_all(void)
{

 /*Place/Copy this part in init section*/
CAN1InitializeAdvanced(SJW, BRP, PHSEG1, PHSEG2, PROPSEG, CAN_CONFIG_FLAGS, &_GPIO_MODULE_CAN1_PA11_12);

  CAN1SetOperationMode(_CAN_OperatingMode_Initialization);                    // set CONFIGURATION mode
  CANSetFilterScale32(0, _CAN_FILTER_ENABLED & _CAN_FILTER_ID_MASK_MODE & _CAN_FILTER_XTD_MSG, ID_1st, -1);

  CAN1SetOperationMode(_CAN_OperatingMode_Normal);               // set NORMAL mode

  //Can_Send_Flags = _CAN_TX_STD_FRAME & _CAN_TX_NO_RTR_FRAME;

    Can_Send_Flags = _CAN_TX_XTD_FRAME &                      //     with CANWrite
                   _CAN_TX_NO_RTR_FRAME;
}
void resetx(void)
{
SystemReset();
}
void can_write1(void)
{
//init_all();
//Can_Send_Flags = _CAN_TX_XTD_FRAME & _CAN_TX_NO_RTR_FRAME;
CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);


}

void main() {

   GPIO_Digital_Input(&GPIOE_BASE, _GPIO_PINMASK_0);
 GPIO_Digital_Input(&GPIOE_BASE, _GPIO_PINMASK_2);
 GPIO_Digital_Output(&GPIOE_BASE, _GPIO_PINMASK_4);
 flag1=1;
 flag2=1;
 init_all();
  while (1) {


  if(KKEY1==0)
  {
     if(flag1==0)
     {
     resetx();
     flag1==1;
     flag2=0;
     }
      flag2=0;
     KOUT1=0;
     RxTx_Data[0]=0x39;
 RxTx_Data[1]=0x39;
 RxTx_Data[2]=0x39;
 RxTx_Data[3]=0x39;
 RxTx_Data[4]=0x39;
 RxTx_Data[5]=0x39;
 RxTx_Data[6]=0x39;
 RxTx_Data[7]=0x39;
 //can_write();
   // CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);
    //Delay_ms(50);
    //init_all();
     }
    if(KKEY1==1)
  {
     if(flag2==0)
     {
     resetx();
     flag2==1;
     flag1=0;
     }
     flag1=0;
      KOUT1=1;
       RxTx_Data[0]=0x30;
 RxTx_Data[1]=0x30;
 RxTx_Data[2]=0x30;
 RxTx_Data[3]=0x30;
 RxTx_Data[4]=0x30;
 RxTx_Data[5]=0x30;
 RxTx_Data[6]=0x30;
 RxTx_Data[7]=0x30;
 //can_write1();

    // CAN1Write(ID_1st, RxTx_Data, 8, Can_Send_Flags);
      //Delay_ms(50);
     }
        //can_write();
      can_write1();

 }
  }
Now, we use the SystemReset(); to solve the questions.
but, it is only use in a super simple case.
if we have to much data to send from CAN, the solution is so bad.

so ,we need your help, thanks .

Post Reply

Return to “Additional Software”