你好,目前我在调试TM4C123FH6PM芯片的时候,CAN设置都成功了,但是can消息不能发送成功,其中can中断只进入过一次,只有这个中断信息CAN_INT_INTID_STATUS,发送和接收中断都无法进入。数据没有发送出来。
设置函数:
void InitCAN0(void)
{
//使能端口F
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
//解锁
HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = 0xFF;
//PF0 PF3作为CAN引脚
GPIOPinConfigure(GPIO_PF0_CAN0RX);
GPIOPinConfigure(GPIO_PF3_CAN0TX);
GPIOPinTypeCAN(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_3);
//使能外设CAN0
SysCtlPeripheralEnable(SYSCTL_PERIPH_CAN0);
//初始化CAN0
CANInit(CAN0_BASE);
//设置通信速率
CANBitRateSet(CAN0_BASE, SysCtlClockGet(), 500000);
//使能CAN0中断
CANIntEnable(CAN0_BASE, CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
//使能CAN0
IntEnable(INT_CAN0);
CANEnable(CAN0_BASE);
}
发送数据:
void Can0SendMsg(unsigned char* msg,int len)
{
g_sCAN[0].MsgObjectTx.ui32MsgID = g_sCAN[0].pulBufferID[0];
g_sCAN[0].MsgObjectTx.ui32MsgIDMask = 0;
g_sCAN[0].MsgObjectTx.ui32Flags = MSG_OBJ_TX_INT_ENABLE; //使用过滤
g_sCAN[0].MsgObjectTx.ui32MsgLen = 8;
g_sCAN[0].MsgObjectTx.pui8MsgData = TxData;
//复制数据
//初始化接收缓冲区
g_sCAN[0].MsgObjectRx.ui32MsgID = g_sCAN[0].pulBufferID[1];
g_sCAN[0].MsgObjectRx.ui32MsgIDMask = 0;
g_sCAN[0].MsgObjectRx.ui32Flags = MSG_OBJ_RX_INT_ENABLE; //使用过滤
g_sCAN[0].MsgObjectRx.ui32MsgLen = 8;
g_sCAN[0].MsgObjectRx.pui8MsgData = g_sCAN[0].pucBufferRx;
//设置
CANMessageSet(CAN0_BASE, 2, &g_sCAN[0].MsgObjectRx,MSG_OBJ_TYPE_RX);
CANMessageSet(CAN0_BASE, 1, &g_sCAN[0].MsgObjectTx, MSG_OBJ_TYPE_TX);
}
主程序:
int main()
{
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_8MHZ |
SYSCTL_OSC_MAIN);
g_ulclock = SysCtlClockGet();
SysTickInit();
uint8_t txbuff[] = {0x02,0x10,0x01};
//启用中断
IntMasterEnable();
//初始化CAN
InitCAN0();
InitCAN1();
SetCan();
while(1)
{
time_DelayMs(500);
Can0SendMsg(txbuff,0);
Can1SendMsg(txbuff,0);
}
请教下论坛大神们,帮我看看,谢谢~