Rx72m的CAN通信 单板使用内部回环自测 报文不能接收

使用瑞萨的Rx72m,进行CAN通信,使用一个单板,进入内部回环自测,即设置api_status = R_CAN_PortSet(g_can_channel, CANPORT_TEST_1_INT_LOOPBACK);

然后报文可以发送,参考了官方的例程,但报文不能实现接收

/*** RECEIVED any frames? */
api_status = R_CAN_RxPoll(g_can_channel, CANBOX_RX);
if (api_status == R_CAN_OK)
{
nr_frames_rx++;                              //这里,数值没有任何的变化

/* Read CAN data and show. */
api_status = R_CAN_RxRead(g_can_channel, g_mb_mode, CANBOX_RX, &rx_dataframe);

/* You can set BP here and check the received data in debugger. */
R_BSP_NOP();

#if BSP_CFG_IO_LIB_ENABLE
printf("Received CAN ID 0x%X, nr_frames_rx = %d.\n", rx_dataframe.id, nr_frames_rx);
#endif
if (api_status == R_CAN_MSGLOST)
{
#if BSP_CFG_IO_LIB_ENABLE
printf( "MSGLOST\n");
#endif
R_BSP_NOP();
}
}

Parents
  • RX23xのマニュアルに記載されている内容から推測する限り、SCR.TE=0の場合はSIOX12端子が入力または出力しない場合でも、ポートは駆動していると思われます。つまり、受信は自動的にRDR12側に切り替わると考えられます。

    また、RXDX12端子とTXDX12端子を兼用した半二重通信を有効にするには、PCR.SHARPS=1およびESMER.ESME=1を設定する必要があります。これにより、半二重通信が有効になり、受信時にはRDR12端子に、送信時にはTXDX12端子にデータが送信されるようになります。BenefitsCal

    ただし、SCR.TE=1の場合、SIOX12端子は出力モードになりますが、SCR.TE=0の場合は、SIOX12端子が入力または出力しない場合でも、ポートは駆動するため、注意が必要です。適切な入出力の制御を行うようにプログラムを設計する必要があります。

Reply
  • RX23xのマニュアルに記載されている内容から推測する限り、SCR.TE=0の場合はSIOX12端子が入力または出力しない場合でも、ポートは駆動していると思われます。つまり、受信は自動的にRDR12側に切り替わると考えられます。

    また、RXDX12端子とTXDX12端子を兼用した半二重通信を有効にするには、PCR.SHARPS=1およびESMER.ESME=1を設定する必要があります。これにより、半二重通信が有効になり、受信時にはRDR12端子に、送信時にはTXDX12端子にデータが送信されるようになります。BenefitsCal

    ただし、SCR.TE=1の場合、SIOX12端子は出力モードになりますが、SCR.TE=0の場合は、SIOX12端子が入力または出力しない場合でも、ポートは駆動するため、注意が必要です。適切な入出力の制御を行うようにプログラムを設計する必要があります。

Children
No Data