您好,
我在使用RL78F24的CAN模块的时候遇到了问题,我在成功发送CAN报文后tx history无法记录我发送的报文,我应该如何修改?下图是我smartconfigurator中的配置:
还有一个问题,我想要在发送CAN报文后确认发送成功,现在用的是Successful Transmission from a Common FIFO in TX mode for a channel这个中断,但通过这个中断没办法确认到底是那一条报文发送成功,所以我想用tx history来做这个功能,有什么其他更好的方法吗
使用R_CAN_ReadTxHistory 函数没有用吗,方便展示下您的CAN相关函数的调用吗
推荐您根据此文档来配置CAN:community-ja.renesas.com/.../r01an6334ej0100_2D00_rl78f24.pdf
您好,这个问题已经解决了。我在发送CAN报文是没有把Msg.hdr.thlen位置1
谢谢,在使用smartconfigurator生成代码时我看到了这个文档
我使用R_CAN_SendByTXMB这个函数发送时,总是返回CAN_ERR_BUF_BUSY,
if (CAN_SUCCESS == rtn)
{
/* Clear TX message buffer status */
CAN_TM_SFR.TMSTSm[txbuf_idx] = CAN_U08_CLR;
/* Check TX message buffer status */
if (!(CAN_TM_SFR.TMSTSm[txbuf_idx])) /* Not clear? */
rtn = CAN_ERR_BUF_BUSY;
}
else
rtn = CAN_ERR_BUF_EMPTY ; /* No operation */
他不能成功清除标志位是怎么回事?你有出现这个问题吗
是每次传输都会出现,还是传输量大的时候出现,检查下buffer大小和通信速度是不是超过最大速率了
只传输一次是返回success 超过一次就是busy了,但是只传输一次的时候,我调用函数R_CAN_GetTXMBResult(CAN_TXBUF0)检查结果,一直都是CAN_TXB_TRANSMITTING在传输中,波形也不正确。
void CAN_Init(){
volatile uint32_t i = 0;
R_CAN_Create();
RTN = R_CAN_SetConfig();
filter.IDE_TYPE = CAN_IDE_STD_FORMAT;
filter.RTR_TYPE = CAN_RTR_ANY_FRAME;
filter.ID = 0x100u;
filter.ID_MASK = 0x7FFu;
option.DLC = 0u;
option.LB = 0u;
option.LBL = 0xA5A5u;
option.IFL = 2u;
rxbuf_idx = 0;
RTN = R_CAN_AddRxRule(&filter, CAN_STORE_RM, rxbuf_idx, &option);
RTN = CAN_ERR_WAITING;
while (CAN_ERR_WAITING == RTN)
RTN = R_CAN_StartComm();
if (CAN_SUCCESS == RTN)
while (0x0080u != R_CAN_GetChStatus()); /* Wait until communication is ready */
/* error process */RTN = 66;
i = get_fclk_freq_hz();
tx_frame.Head.Bits.ID = 0x7FEuL;
tx_frame.Head.Bits.THLEN = 1u;
tx_frame.Head.Bits.RTR = 0u;
tx_frame.Head.Bits.IDE = 0u;
tx_frame.Head.Bits.FDCTR = CAN_FDCTR_CLASSICAL;
tx_frame.Head.Bits.DLC = CAN_DLC_LEN8;
tx_frame.Head.Bits.IFL = 0u;
tx_frame.Head.Bits.LBL = 0u;
for(i=0; i<CAN_DLC_LEN8; i++)
tx_frame.Data.DB[i] = 0x11u * (i + 1);;
int main(void)
R_Systeminit();
Device_Start();
CAN_Init();
EI();
int j =0;
while(1){
for(;j<1;j++)
ret = R_CAN_SendByTXMB(CAN_TXBUF0, &tx_frame);
delay_ms(250);
result = R_CAN_GetTXMBResult(CAN_TXBUF0);
波特率特意配置慢了,配了250kpbs。是不是我时钟没配置好
能抓一下CAN波形吗,波形也是乱的吗?
波形不正常,而且我只发了一次,但是他会一直重复这个波形