原子哥,我用的是stm32f103zet6,战舰板。想用两个CAN接口,能不能这样用啊:CAN1用的是PA11、PA12。CAN2用的是引脚复用,PB8、PB9。 复用的是CAN2,但好像找不到CAN2的中断函数名啊, 实验的时候,CAN1能正常收数据,CAN2好像进不了中断,也没收到数据…………
还有就是f103zet6里主CAN(CAN1)和从CAN(CAN2)有什么区别啊,还是它根本没有CAN2呢?
互联型的有两个CAN接口,但我现在手里只有f103zet6啊,上面的方法不可行的话,还有什么办法没有呢?
先谢谢啦
各位大神也帮小弟我看看吧,不胜感激
[mw_shl_code=c,true]static void CAN_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
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);//??????IO
/*???è?±???è??*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_CAN2, ENABLE);
/* Configure CAN pin: RX */ // PB8
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // ????????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure CAN pin: TX */ // PB9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // ???????ì????
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
static void CAN_NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/*?????è??*/
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; //CAN1 RX0????
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //??????????0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //×?????????0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/*?????è??*/
NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX1_IRQn; //这里找不了CAN2的接收中断名…………
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //??????????0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //×?????????0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
static void CAN_Mode_Config(void)
{
CAN_InitTypeDef CAN_InitStructure;
/************************CAN?¨???????è??**********************************/
/*CAN?????÷??????*/
CAN_DeInit(CAN1);
CAN_DeInit(CAN2);
CAN_StructInit(&CAN_InitStructure);
/*CAN??????????*/
CAN_InitStructure.CAN_TTCM=DISABLE; //MCR-TTCM ??±??±????·??¨??????????
CAN_InitStructure.CAN_ABOM=ENABLE; //MCR-ABOM ×??????????í
CAN_InitStructure.CAN_AWUM=ENABLE; //MCR-AWUM ????×???????????
CAN_InitStructure.CAN_NART=DISABLE; //MCR-NART ????±¨??×??????? DISABLE-×???????
CAN_InitStructure.CAN_RFLM=DISABLE; //MCR-RFLM ????FIFO ???¨???? DISABLE-?????±??±¨???á????????±¨??
CAN_InitStructure.CAN_TXFP=DISABLE; //MCR-TXFP ·???FIFO?????? DISABLE-????????????±¨??±ê??·?
CAN_InitStructure.CAN_Mode=CAN_Mode_Normal; //?????¤×÷????
CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; //BTR-SJW ?????????????í?? 1???±??????
CAN_InitStructure.CAN_BS1=CAN_BS1_3tq; //BTR-TS1 ?±????1 ??????2???±??????
CAN_InitStructure.CAN_BS2=CAN_BS2_2tq; //BTR-TS1 ?±????2 ??????3???±??????
CAN_InitStructure.CAN_Prescaler=24; ////BTR-BRP ?¨????·????÷ ?¨?????±?????????±???¤?? 36/(1+2+3)/6=1Mbps
CAN_Init(CAN1, &CAN_InitStructure);
CAN_Init(CAN2, &CAN_InitStructure);
}[/mw_shl_code]
|