/* CAN FIFO0 message pending interrupt enable */
CAN_ITConfig(CAN_IT_FMP0, ENABLE); //FIFO0 消息挂号中断屏蔽
CAN_ITConfig(CAN_IT_TME, ENABLE); //发送邮箱空中断屏蔽
CAN_ITConfig(CAN_IT_BOF, ENABLE); //离线中断允许
第二步,在嵌套向量中断控制中设置下,代码如下:
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
/* Enable CAN RX0 interrupt IRQ channel */ //接收中断
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN_RX0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//发送中断,如果是查询方式发送的话,下面代码不要
NVIC_InitStructure.NVIC_IRQChannel=USB_HP_CAN_TX_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢先中断优先
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应中断优先
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
第三步,编写发送子函数
CanTxMsg TxMessage; //定义数据结构类型变量
u8 TransmitMailbox = 0;
u16 i = 0;
TxMessage.ExtId=(tempid << 13); //tempId 为接受板地址,应用过程中要左移 13 位
TxMessage.IDE=CAN_ID_EXT;//使用扩展帧
TxMessage.RTR=CAN_RTR_DATA;//发送数据帧
TxMessage.DLC= 1; //设置发送数据的长度
TxMessage.Data[0] = SendData;//赋值待发送
TransmitMailbox = CAN_Transmit(&TxMessage);//开始发送数据
i = 0;
//通过检查 CANTXOK 位来确认发送是否成功
while((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && (i != 0xFF))
{
i++;
}