打印
[STM32F1]

f105 can配置不知哪里有错误一直不出报文

[复制链接]
607|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
banxiafeixia|  楼主 | 2017-4-5 11:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
清明假期弄半天一直没出结果,很难受
沙发
banxiafeixia|  楼主 | 2017-4-5 11:58 | 只看该作者
#include "can.h"
u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{GPIO_InitTypeDef GPIO_InitStructure;
        CAN_InitTypeDef        CAN_InitStructure;
        CAN_FilterInitTypeDef  CAN_FilterInitStructure;
#if CAN_RX0_INT_ENABLE
           NVIC_InitTypeDef  NVIC_InitStructure;
#endif
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);                                                                                                          
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//ʹÄÜCAN1ʱÖÓ
       
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;       
    GPIO_Init(GPIOA, &GPIO_InitStructure);       
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
                GPIO_PinRemapConfig(GPIO_Remap2_CAN1,ENABLE);
       
           CAN_InitStructure.CAN_TTCM=DISABLE;                                       
          CAN_InitStructure.CAN_ABOM=DISABLE;                                                 
          CAN_InitStructure.CAN_AWUM=DISABLE;                                               
          CAN_InitStructure.CAN_NART=ENABLE;                                                 
          CAN_InitStructure.CAN_RFLM=DISABLE;                                               
          CAN_InitStructure.CAN_TXFP=DISABLE;                                               
          CAN_InitStructure.CAN_Mode= mode;             

          CAN_InitStructure.CAN_SJW=tsjw;                       
          CAN_InitStructure.CAN_BS1=tbs2;
          CAN_InitStructure.CAN_BS2=tbs1;
          CAN_InitStructure.CAN_Prescaler=brp;            
          CAN_Init(CAN1, &CAN_InitStructure);         
    CAN_FilterInitStructure.CAN_FilterNumber=0;       
          CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
          CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
          CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
          CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;
          CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);
               
#if CAN_RX0_INT_ENABLE
    CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
    NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
          NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;   
          NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;         
          NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
          NVIC_Init(&NVIC_InitStructure);
#endif
        return 0;}   
#if CAN_RX0_INT_ENABLE       
                    
void CAN1_RX0_IRQHandler(void)
{CanRxMsg RxMessage;
        int i=0;
    CAN_Receive(CAN1, 0, &RxMessage);
          Can1_Send_Msg(RxMessage.Data,8);
        GPIO_SetBits(GPIOD,GPIO_Pin_3);
        GPIO_ResetBits(GPIOD,GPIO_Pin_3);}
#endif
u8 Can1_Send_Msg(u8* msg,u8 len)
{        u8 mbox;
  u16 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0x12;                                       
  TxMessage.ExtId=0x12;                               
  TxMessage.IDE=0;                       
  TxMessage.RTR=0;               
  TxMessage.DLC=len;                                                       
  for(i=0;i<8;i++)
  TxMessage.Data[i]=msg[i];                                 
  mbox= CAN_Transmit(CAN1, &TxMessage);   
  i=0;
  while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;       
  if(i>=0XFFF)return 1;
  return 0;                }
u8 Can_Receive_Msg(u8 *buf)
{                u32 i;
        CanRxMsg RxMessage;
    if( CAN_MessagePending(CAN1,CAN_FIFO0)==0)return 0;               
    CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
    for(i=0;i<8;i++)
    buf[i]=RxMessage.Data[i];  
        return RxMessage.DLC;        }




使用特权

评论回复
板凳
banxiafeixia|  楼主 | 2017-4-5 11:58 | 只看该作者
卡在这里半天了,还是不知哪里有错误,求大神指点

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

93

帖子

2

粉丝