请问各位大神,我这can的配置有没有什么问题,为什么发不出数据?

2019-08-17 10:23发布

请问各位大神,我这can的配置有没有什么问题,为什么发不出数据?

#include "can.h"

/*完整配置can的功能*/
       
void CAN_Config(void)
{
        CAN_GPIO_Config();
        CAN_NVIC_Config();
        CAN_Mode_Config();
        CAN_Filter_Config();
}

/*CAN的GPIO配置*/
void CAN_GPIO_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
       
        /*外设时钟设置*/
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);
       
        /*拉低can的S脚*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
        GPIO_ResetBits(GPIOC,GPIO_Pin_9);
       
        /*PA11上拉输入*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        /*PA12复用推挽输出*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
}
       
       
       
       
/*CAN的NVIC配置*/
void CAN_NVIC_Config(void)
        {
                NVIC_InitTypeDef NVIC_InitStructure;
                NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
                NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                NVIC_Init(&NVIC_InitStructure);
        }
       
       
       
       
/*CAN的模式配置*/
void CAN_Mode_Config(void)
        {
                CAN_InitTypeDef CAN_InitStructure;
                CAN_DeInit(CAN1);
                CAN_StructInit(&CAN_InitStructure);
                CAN_InitStructure.CAN_TTCM = DISABLE;
                CAN_InitStructure.CAN_ABOM = ENABLE;
                CAN_InitStructure.CAN_AWUM = ENABLE;
                CAN_InitStructure.CAN_NART = DISABLE;
                CAN_InitStructure.CAN_RFLM = DISABLE;
                CAN_InitStructure.CAN_TXFP = DISABLE;
                CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
                CAN_InitStructure.CAN_SJW = CAN_SJW_2tq;
                CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq;
                CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
                CAN_InitStructure.CAN_Prescaler = 4;
                CAN_Init(CAN1,&CAN_InitStructure);
        }
       
       
       
       
/*CAN的过滤器配置*/
void CAN_Filter_Config(void)
        {
                CAN_FilterInitTypeDef CAN_FilterInitStructure;
                CAN_FilterInitStructure.CAN_FilterNumber = 0;
                CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
                CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
                CAN_FilterInitStructure.CAN_FilterIdHigh = (((u32)0x1314<<3)&0xFFFF0000)>>16;
                CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)0x1314<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF;
                CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
                CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
                CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
                CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
                CAN_FilterInit(&CAN_FilterInitStructure);
                CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
        }


0条回答

一周热门 更多>