你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 924|回复: 2

CAN 通讯无法发送 但是如果先收到消息就可以发送

[复制链接]

5

主题

45

回帖

3

蝴蝶豆

高级会员

最后登录
2020-8-20
发表于 2017-7-1 21:45:34 | 显示全部楼层 |阅读模式
只要接收不到数据   消息数据一直不发送  
但是收到数据  消息一直发送

其实按道理来说 就算没收到数据也应该一直发啊
求大神帮忙看看 是哪没设置好  找了四五天了也没找到什么原因
主程序:
void NVIC_Configuration(void)
{

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶

}
int main(void)
{         
        u8 key;
        u8 i=0,t=0;
        u8 cnt=0;
        u8 canbuf[8] = {0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01};
        u8 res;
        NVIC_Configuration();          
        CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,5,CAN_Mode_Normal);       
        while(1)
        {
              uint8_t flag =  Can_Receive_Msg(canbuf);
                uint8_t i,j;
                for(i=0;i<255;i++)
                {
                        for(j=0;j<255;j++);
                }
                res=Can_Send_Msg(canbuf,8);
        }
u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)
{

          GPIO_InitTypeDef GPIO_InitStructure;
          CAN_InitTypeDef        CAN_InitStructure;
          CAN_FilterInitTypeDef  CAN_FilterInitStructure;


          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);//ʹÄÜʱÖÓ        RCC_APB2Periph_AFIO|                                                                                                            
          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);                //³õʼ»¯IO

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//ÉÏÀ­ÊäÈë
        GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯IO
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;  //CAN_STB
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);                //³õʼ»¯IO
        GPIO_ResetBits(GPIOC,GPIO_Pin_7);           //STB L
          
          //CANµ¥ÔªÉèÖÃ
          CAN_InitStructure.CAN_TTCM=DISABLE;                                                 //·Çʱ¼ä´¥·¢Í¨ÐÅģʽ  //
          CAN_InitStructure.CAN_ABOM=DISABLE;                                                 //Èí¼þ×Ô¶¯ÀëÏß¹ÜÀí         //
          CAN_InitStructure.CAN_AWUM=DISABLE;                                                 //˯Ãßģʽͨ¹ýÈí¼þ»½ÐÑ(Çå³ýCAN->MCRµÄSLEEPλ)//
          CAN_InitStructure.CAN_NART=ENABLE;                                                         //½ûÖ¹±¨ÎÄ×Ô¶¯´«ËÍ //
          CAN_InitStructure.CAN_RFLM=DISABLE;                                                 //±¨ÎIJ»Ëø¶¨,еĸ²¸Ç¾ÉµÄ //
          CAN_InitStructure.CAN_TXFP=DISABLE;                                                 //ÓÅÏȼ¶Óɱ¨Îıêʶ·û¾ö¶¨ //
          CAN_InitStructure.CAN_Mode= mode;                     //ģʽÉèÖ㺠mode:0,ÆÕͨģʽ;1,»Ø»·Ä£Ê½; //

          CAN_InitStructure.CAN_SJW=tsjw;                                //ÖØÐÂͬ²½ÌøÔ¾¿í¶È(Tsjw)Ϊtsjw+1¸öʱ¼äµ¥Î»  CAN_SJW_1tq         CAN_SJW_2tq        CAN_SJW_3tq CAN_SJW_4tq
          CAN_InitStructure.CAN_BS1=tbs1; //Tbs1=tbs1+1¸öʱ¼äµ¥Î»CAN_BS1_1tq ~CAN_BS1_16tq
          CAN_InitStructure.CAN_BS2=tbs2;//Tbs2=tbs2+1¸öʱ¼äµ¥Î»CAN_BS2_1tq ~        CAN_BS2_8tq
          CAN_InitStructure.CAN_Prescaler=brp;            //·ÖƵϵÊý(Fdiv)Ϊbrp+1        //
          CAN_Init(CAN1, &CAN_InitStructure);            // ³õʼ»¯CAN1

          CAN_FilterInitStructure.CAN_FilterNumber=0;          //¹ýÂËÆ÷0
          CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
          CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //32λ
          CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;////32λID
          CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32λMASK
          CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//¹ýÂËÆ÷0¹ØÁªµ½FIFO0
          CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //¼¤»î¹ýÂËÆ÷0

          CAN_FilterInit(&CAN_FilterInitStructure);//Â˲¨Æ÷³õʼ»¯

        return 0;
}   
u8 Can_Send_Msg(u8* msg,u8 len)
{       
  u8 mbox;
  u16 i=0;
  CanTxMsg TxMessage;
  TxMessage.StdId=0x00;                                         // ±ê×¼±êʶ·ûΪ0
  TxMessage.ExtId=0x00;                                 // ÉèÖÃÀ©Õ¹±êʾ·û£¨29룩
  TxMessage.IDE=0;                         // ʹÓÃÀ©Õ¹±êʶ·û
  TxMessage.RTR=0;                 // ÏûÏ¢ÀàÐÍΪÊý¾ÝÖ¡£¬Ò»Ö¡8λ
  TxMessage.DLC=len;                                                         // ·¢ËÍÁ½Ö¡ÐÅÏ¢
  for(i=0;i<len;i++)
  TxMessage.Data=msg;                                 // µÚÒ»Ö¡ÐÅÏ¢         
  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=RxMessage.Data;  
  return RxMessage.DLC;       
}

回复

使用道具 举报

5

主题

45

回帖

3

蝴蝶豆

高级会员

最后登录
2020-8-20
 楼主| 发表于 2017-7-1 21:54:03 | 显示全部楼层
自顶起来
回复 支持 反对

使用道具 举报

5

主题

45

回帖

3

蝴蝶豆

高级会员

最后登录
2020-8-20
 楼主| 发表于 2017-7-2 10:12:31 | 显示全部楼层
求救啊 啊啊 啊啊
回复 支持 反对

使用道具 举报

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版