打印
[APM32F1]

CAN起不来

[复制链接]
359|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
信号www12|  楼主 | 2023-7-29 14:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CAN管脚,用的官方的例程,管脚改用的是PA12和PA11,其它的没改动,但CAN不能工作

使用特权

评论回复
沙发
信号www12|  楼主 | 2023-7-29 14:27 | 只看该作者
void CAN_Config_Init(void)
{
    GPIO_Config_T gpioConfig;
    CAN_Config_T       canConfig;
    CAN_FilterConfig_T filterConfig;
   
    /* GPIOB, GPIOD and AFIO clocks enable */
    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA  | RCM_APB2_PERIPH_AFIO);
    /* CAN1 and CAN2 Periph clocks enable */
    RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_CAN1 );

    /* CAN GPIO Init */
    /* CAN1 Tx remap 1 */
    //GPIO_ConfigPinRemap(GPIO_NO_REMAP_CAN1);
    gpioConfig.pin   = GPIO_PIN_12;
    gpioConfig.mode  = GPIO_MODE_AF_PP;
    gpioConfig.speed = GPIO_SPEED_50MHz;
    GPIO_Config(GPIOA, &gpioConfig);

    /* CAN1 Rx remap 1 */
    gpioConfig.pin = GPIO_PIN_11;
    gpioConfig.mode = GPIO_MODE_IN_PU;
    GPIO_Config(GPIOA, &gpioConfig);

    CAN_Reset(CAN1);

    CAN_ConfigStructInit(&canConfig);

    /* CAN1 and CAN2 cell init */
    canConfig.autoBusOffManage = DISABLE;
    canConfig.autoWakeUpMode   = DISABLE;
    canConfig.nonAutoRetran    = DISABLE;
    canConfig.rxFIFOLockMode   = DISABLE;
    canConfig.txFIFOPriority   = ENABLE;
    canConfig.mode             = CAN_MODE_NORMAL;
    canConfig.syncJumpWidth    = CAN_SJW_1;
    canConfig.timeSegment1     = CAN_TIME_SEGMENT1_3;
    canConfig.timeSegment2     = CAN_TIME_SEGMENT2_2;
    canConfig.prescaler = 6;

    CAN_Config(CAN1, &canConfig);

    /* CAN1 filter init */
    filterConfig.filterNumber = 1;
    filterConfig.filterMode = CAN_FILTER_MODE_IDMASK;
    filterConfig.filterScale = CAN_FILTER_SCALE_32BIT;
    filterConfig.filterIdHigh = 0x6420;
    filterConfig.filterIdLow  = 0x0000;
    filterConfig.filterMaskIdHigh = 0x0000;
    filterConfig.filterMaskIdLow  = 0x0000;
    filterConfig.filterFIFO = CAN_FILTER_FIFO_0;
    filterConfig.filterActivation =  ENABLE;
    CAN_ConfigFilter(CAN1,&filterConfig);
   

  
    /* Enable CAN Interrupt */
    CAN_EnableInterrupt(CAN1, CAN_INT_F0MP);

        NVIC_EnableIRQRequest(USBD1_LP_CAN1_RX0_IRQn, 0, 0);
}


void CAN_Transmit_Init(void)
{
    TxMessage.stdID = 0x321;
    TxMessage.extID = 0x001;
    TxMessage.remoteTxReq   = CAN_RTXR_DATA;
    TxMessage.typeID   = CAN_TYPEID_STD;
    TxMessage.dataLengthCode   = 1;
}


void app_can_init(void)
{

    CAN_Config_Init();
    CAN_Transmit_Init();
    CAN_EnableInterrupt(CAN1, CAN_INT_F0MP);
}

/* CAN发送数据 */
void can_send(uint32_t id, const uint8_t *msg, uint8_t len)
{
        CAN_TxMessage_T   Txmsg;
        Txmsg.stdID = id;
    Txmsg.extID = id;
    Txmsg.remoteTxReq   = CAN_RTXR_DATA;
    Txmsg.typeID   = CAN_TYPEID_STD;
    Txmsg.dataLengthCode   = len;
        memcpy(Txmsg.data,msg,len);
        CAN_TxMessage(CAN1, &Txmsg);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝