This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28388D: 关于28388D CAN通信波特率的问题

Part Number: TMS320F28388D

工程师您好
我最近在调试28388D 中的CAN通信,原来我的CAN波特率设置为500K,系统工作正常

现在我想将CAN设置为1M,但此时status不等于我设定的RX_MSG_OBJ_ID,具体代码如下

CAN_initModule(CANA_BASE);
CAN_setBitRate(CANA_BASE, DEVICE_SYSCLK_FREQ, 1000000, 25);
CAN_enableInterrupt(CANA_BASE, CAN_INT_IE0 | CAN_INT_ERROR | CAN_INT_STATUS);

Interrupt_register(INT_CANA0,&canaISR);
Interrupt_enable(INT_CANA0);
CAN_enableGlobalInterrupt(CANA_BASE, CAN_GLOBAL_INT_CANINT0);
CAN_setupMessageObject(CANA_BASE, RX_MSG_OBJ_ID, 0x000000,CAN_MSG_FRAME_STD, CAN_MSG_OBJ_TYPE_RX, 0,CAN_MSG_OBJ_USE_ID_FILTER|CAN_MSG_OBJ_RX_INT_ENABLE, MSG_DATA_LENGTH);
CAN_startModule(CANA_BASE);

while(1)
{
if(send_flag)
{
send_flag = 0;
GPIO_writePin(DEVICE_GPIO_PIN_422, 0);
t=0;
for(t=1;t<8;t++)
{
// if(send_buf[t] == 0)
// {
// continue;
// }
SCI_writeCharBlockingNonFIFO(SCIB_BASE, send_buf[t]);
if(send_buf[t] == '\n')
{
send_buf[t] = 0;
break;
}
send_buf[t] = 0;
}
GPIO_writePin(DEVICE_GPIO_PIN_422, 1);
}
}
}
__interrupt void canaISR(void)
{
uint16_t i = 0;
uint32_t status;
status = CAN_getInterruptCause(CANA_BASE);
if(status == CAN_INT_INT0ID_STATUS)
{
status = CAN_getStatus(CANA_BASE);
if(((status & ~(CAN_STATUS_RXOK)) != CAN_STATUS_LEC_MSK) && ((status & ~(CAN_STATUS_RXOK)) != CAN_STATUS_LEC_NONE))
{
errorFlag = 1;
}
}
else if(status == RX_MSG_OBJ_ID)
{
CAN_readMessage(CANA_BASE, RX_MSG_OBJ_ID, rxMsgData);
for(i=1;i<8;i++)
{
if(rxMsgData[i] == '$')
{
GPIO_writePin(DEVICE_GPIO_PIN_CANA, 0);
head_flag = 1;
send_temp_buf_i = 0;
}
if(head_flag)
{
if(rxMsgData[i] == 0)
{
continue;
}
if(rxMsgData[i] == ',')
{
heng_cnt++;
}
send_temp_buf[send_temp_buf_i++] = rxMsgData[i];
}
if(rxMsgData[i] == '\n' && heng_cnt >= 18)
{
for(my_i=0;my_i<send_temp_buf_i;my_i++)
{
send_buf[my_i] = send_temp_buf[my_i];
send_temp_buf[my_i] = 0;
if(send_buf[my_i] == '\n')
break;
}
head_flag = 0;
send_flag = 1;
send_temp_buf_i = 0;
heng_cnt = 0;
rxMsgData[i] = 0;
GPIO_writePin(DEVICE_GPIO_PIN_CANA, 1);
break;
}
}
CAN_clearInterruptStatus(CANA_BASE, RX_MSG_OBJ_ID);
errorFlag = 0;
}
CAN_clearGlobalInterruptStatus(CANA_BASE, CAN_GLOBAL_INT_CANINT0);
Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}

x 出现错误。请重试或与管理员联系。