OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2565|回复: 2

关于CAN收发数据的问题

[复制链接]

15

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2017-8-4
在线时间
48 小时
发表于 2018-9-30 09:01:05 | 显示全部楼层 |阅读模式
1金钱
以下是CAN配置的代码
void CAN_Configuration(void)
{
        u16 temp;

        GPIO_InitTypeDef                 GPIO_InitStructure;
        CAN_InitTypeDef                CAN_InitStructure;
        CAN_FilterInitTypeDef          CAN_FilterInitStructure;

        NVIC_InitTypeDef                  NVIC_InitStructure;

        printf("Can Configuration\r\n");
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//ê1ÄüPORTAê±Öó                                                                                                                    

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//ê1Äü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);                        //3õê¼»ˉIO

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;        //éÏà-êäèë
        GPIO_Init(GPIOA, &GPIO_InitStructure);                        //3õê¼»ˉIO
       
       
        CAN_DeInit(CAN1);
        CAN_StructInit(&CAN_InitStructure);
       
        CAN_InitStructure.CAN_TTCM=DISABLE;
        CAN_InitStructure.CAN_ABOM=DISABLE;
        CAN_InitStructure.CAN_AWUM=DISABLE;
        CAN_InitStructure.CAN_NART=DISABLE;//ÔêDí×Ô¶ˉÖØ′«
        CAN_InitStructure.CAN_RFLM=DISABLE;
        CAN_InitStructure.CAN_TXFP=DISABLE;

        CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;//CAN_Mode_LoopBack;//CAN_Mode_Normal;         //32M/8/20 = 200K
        CAN_InitStructure.CAN_SJW=CAN_SJW_2tq;
        CAN_InitStructure.CAN_BS1=CAN_BS1_9tq;
        CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
        CAN_InitStructure.CAN_Prescaler=8;
        CAN_Init(CAN1,&CAN_InitStructure);

        temp = 0;
        temp |= CAN_SELF_ADDRESS;
        temp <<= 8;
        temp |= DET_SOURCE_ADDRESS;
       
        /* CAN filter init */
        CAN_FilterInitStructure.CAN_FilterNumber=0;
        CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
        CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
        CAN_FilterInitStructure.CAN_FilterIdHigh=temp ;
        CAN_FilterInitStructure.CAN_FilterIdLow=0x0004;         //μúèy&#206;&#187;&#206;a1  ±íê&#190;&#214;&#187; &#189;óê&#213;à&#169;&#213;1&#214;&#161;
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff; ////1 ±&#216;D&#235;&#198;¥&#197;&#228;  0  2&#187;1&#216;D&#196; 0xfff0
        CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0004;
        CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
        CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
        CAN_FilterInit(&CAN_FilterInitStructure);
       
        /* CAN FIFO0 message pending interrupt enable */
        CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);
        CAN_ITConfig(CAN1,CAN_IT_TME, ENABLE);

        CAN_ITConfig(CAN1,CAN_IT_BOF, ENABLE);//à&#235;&#207;&#223;&#214;D&#182;&#207;&#212;êDí
       
        NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;     // &#214;÷ó&#197;&#207;è&#188;&#182;&#206;a1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;            // ′&#206;ó&#197;&#207;è&#188;&#182;&#206;a0
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
       
}  

//数据发送函数
void Can_Send_Msg(u8* msg,u8 len)
{       
        u8 mbox;
        u16 i=0;
        CanTxMsg TxMessage;
        TxMessage.StdId=0x12;                        // ±ê×&#188;±êê&#182;·&#251;
        TxMessage.ExtId=0x12;                        // éè&#214;&#195;à&#169;&#213;1±êê&#190;·&#251;
        TxMessage.IDE=CAN_Id_Standard;         // ±ê×&#188;&#214;&#161;
        TxMessage.RTR=CAN_RTR_Data;                // êy&#190;Y&#214;&#161;
        TxMessage.DLC=len;                                // òa·¢&#203;íμ&#196;êy&#190;Y3¤&#182;è
        for(i=0;i<len;i++)
        TxMessage.Data[i]=msg[i];                                  
        mbox= CAN_Transmit(CAN1, &TxMessage);   
        i=0;
        while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))i++;        //μè′y·¢&#203;í&#189;áê&#248;
        printf("finish send can data\r\n");
}


//主函数
int main(void)
{
        u32 i;
        u8 m = 0;       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é&#206;a×é2£o2&#206;&#187;&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;£&#172;2&#206;&#187;&#207;ìó|ó&#197;&#207;è&#188;&#182;
        LED_INIT();                                  //3&#245;ê&#188;&#187;ˉó&#235;LEDá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
        uart_init(9600);
        GPIO_ResetBits(GPIOB,GPIO_Pin_0);
        CAN_Configuration();
        CAN_Internal_Buffer[0] = 0xDD;
        CAN_Internal_Buffer[1] = 0xDD;
        GPIO_SetBits(GPIOC,GPIO_Pin_8);
        printf("Restart\r\n");
        while(1)
        {
                for(i=0;i<1000000;i++)
                {
                       
                }
                if(m == 0)
                {
                        GPIO_SetBits(GPIOC,GPIO_Pin_7);
                        m = 1;
                }
                else
                {
                        GPIO_ResetBits(GPIOC,GPIO_Pin_7);
                        m = 0;
                }
                Can_Send_Msg(CAN_Internal_Buffer,2);
        }
               
}


程序能正常运行到CAN发送函数,但用USBCAN调试助手监测,并没有看到CAN发出的数据是怎么回事?难道是CAN配置哪里出了问题?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14433
金钱
14433
注册时间
2018-8-3
在线时间
1157 小时
发表于 2018-9-30 09:27:55 | 显示全部楼层
啊哈~加油!!
回复

使用道具 举报

35

主题

309

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2641
金钱
2641
注册时间
2016-8-10
在线时间
470 小时
发表于 2018-9-30 17:50:57 | 显示全部楼层
可能原因是因为你这个CAN数据再while中一直发,你的调试助手可能检测不到  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 07:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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