搜索
查看: 1386|回复: 2

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

[复制链接]

该用户从未签到

5

主题

50

帖子

3

蝴蝶豆

高级会员

最后登录
2022-11-12
发表于 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

主题

50

帖子

3

蝴蝶豆

高级会员

最后登录
2022-11-12
 楼主| 发表于 2017-7-1 21:54:03 | 显示全部楼层
自顶起来
回复

使用道具 举报

该用户从未签到

5

主题

50

帖子

3

蝴蝶豆

高级会员

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

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-29 06:35 , Processed in 1.159519 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表