background image

          /* 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++;
   }