stm32f103c8t6初始化失败

问题:使用stm32f103c8t6单片机做回环实验,在初始化can_init 的时候失败,程序一直卡在如下位置
while (((CANx->MSR & CAN_MSR_INAK) != CAN_MSR_INAK) && (wait_ack != INAK_TIMEOUT))
{
wait_ack++;
}
查看了stm32手册,是如下解释的:

_INRQ: 初始化请求 (Initialization request)
软件对该位清’0’可使CAN从初始化模式进入正常工作模式:当CAN在接收引脚检测到连续的11
个隐性位后,CAN就达到同步,并为接收和发送数据作好准备了。为此,硬件相应地对
CAN_MSR寄存器的INAK位清’0’。
软件对该位置1可使CAN从正常工作模式进入初始化模式:一旦当前的CAN活动(发送或接收)结
束,CAN就进入初始化模式。相应地,硬件对CAN_MSR寄存器的INAK位置’1’

现在是 硬件对CAN_MSR寄存器的INAK位怎么也不会 置’1’

电路连接如下:

img

网上差了好多资料,有的说是波特率有的说是引脚复用。

代码如下:

#include "stm32f10x.h"                  // Device header
#include "stdbool.h"
#include "can.h"


void CAN_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    //ʹÄÜʱÖÓ
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); 

    //CAN_TX   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PA12
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;           //¸´ÓÃÍÆÍìÊä³ö,TX
  GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯
  //CAN_RX      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PA11
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;        //ÉÏÀ­ÊäÈë RX
  GPIO_Init(GPIOA, &GPIO_InitStructure);//³õʼ»¯
    
    //#define GPIO_Remap_CAN    GPIO_Remap1_CAN1 ±¾ÊµÑéûÓÐÓõ½ÖØÓ³ÉäI/O
  //GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);
}

extern uint8_t can_init_status;

void CAN_Mode_Config(void)
{
    CAN_InitTypeDef CAN_InitStructure;
    //ÅäÖóÉ1M bps£¬²¨ÌØÂÊ=36M/((CAN_BS1+CAN_BS2+1)*CAN_Prescaler)
    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;//±¨ÎÄ×Ô¶¯ÖØ´« (0ΪÆôÓÃ)
    CAN_InitStructure.CAN_RFLM = DISABLE;//FIFOÒç³öʱ±¨Îĸ²¸ÇÔ­Îļþ
    CAN_InitStructure.CAN_TXFP = ENABLE;//±¨ÎÄ·¢ËÍÓÅÏȼ¶È¡¾öÓÚÓÊÏäÏȺó
    
    //¹¤×÷ģʽ£º
    CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack;
    //ÉèÖÃCAN²¨ÌØÂÊ  (1MHz)
    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
    CAN_InitStructure.CAN_BS1 = CAN_BS1_8tq;
    CAN_InitStructure.CAN_BS2 = CAN_BS2_7tq;
    CAN_InitStructure.CAN_Prescaler = 6;
    
    //³õʼ»¯CAN
    can_init_status = CAN_Init(CAN1,&CAN_InitStructure);
    while(can_init_status != CAN_InitStatus_Success);
}

void CAN_Filter_Config(void)
{
    CAN_FilterInitTypeDef CAN_FilterInitStruct;
    CAN_FilterInitStruct.CAN_FilterActivation = ENABLE;
    CAN_FilterInitStruct.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;
    CAN_FilterInitStruct.CAN_FilterNumber = 0;
    CAN_FilterInitStruct.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStruct.CAN_FilterMode = CAN_FilterMode_IdMask;

    CAN_FilterInitStruct.CAN_FilterIdHigh = ((PASS_ID<<3 | CAN_Id_Extended | CAN_RTR_Data)&0xFFFF0000)>>16;
    CAN_FilterInitStruct.CAN_FilterIdLow = (PASS_ID<<3 | CAN_Id_Extended | CAN_RTR_Data)&0xFFFF;
    CAN_FilterInitStruct.CAN_FilterMaskIdHigh = 0xFFFF;
    CAN_FilterInitStruct.CAN_FilterMaskIdLow = 0xFFFF;
    CAN_FilterInit(&CAN_FilterInitStruct);
    //½ÓÊܵ½Ò»Ìõ±¨Îļ´¿É²úÉúÖжÏ
    CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
}

void CAN_NVIC_Config(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//ÇÀÕ¼ÓÅÏȼ¶0
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;        //×ÓÓÅÏȼ¶0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //IRQͨµÀʹÄÜ
    NVIC_Init(&NVIC_InitStructure);    //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯NVIC¼Ä´æÆ÷
}

void CAN_Config(void)
{
    CAN_GPIO_Config();    
    CAN_Filter_Config();
    CAN_Mode_Config();
    CAN_NVIC_Config();
}

extern uint8_t Flag;
extern CanRxMsg RX_Message;

void USB_LP_CAN1_RX0_IRQHandler()
{
    CAN_Receive(CAN1,CAN_FIFO0,&RX_Message);
    Flag = 1;
}