stm32f1中can1与can2使用注意

在 STM32F103C8T6 中,CAN1 和 CAN2 的接收中断确实会共享同一个中断向量 USB_LP_CAN1_RX0_IRQn。这是因为 CAN2 是 CAN1 的从机,它们的接收中断是共享的。

1. 中断共享的原因

CAN2 是 CAN1 的从机:

在 STM32F103 系列中,CAN2 是 CAN1 的从机,因此它们的中断是共享的。

CAN1 和 CAN2 的接收中断共用同一个中断向量 USB_LP_CAN1_RX0_IRQn。

中断标志区分:

在中断服务函数中,需要通过检查中断标志来区分是 CAN1 还是 CAN2 触发了中断。

2. 中断服务函数的实现

void USB_LP_CAN1_RX0_IRQHandler(void)
{
    // 检查 CAN1 的中断标志
    if (CAN_GetITStatus(CAN1, CAN_IT_FMP0) != RESET)
    {
        CanRxMsg RxMessage;

        // 读取 CAN1 接收到的消息
        CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);

        // 处理 CAN1 接收到的消息
        // ...

        // 清除 CAN1 的中断标志
        CAN_ClearITPendingBit(CAN1, CAN_IT_FMP0);
    }

    // 检查 CAN2 的中断标志
    if (CAN_GetITStatus(CAN2, CAN_IT_FMP0) != RESET)
    {
        CanRxMsg RxMessage;

        // 读取 CAN2 接收到的消息
        CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);

        // 处理 CAN2 接收到的消息
        // ...

        // 清除 CAN2 的中断标志
        CAN_ClearITPendingBit(CAN2, CAN_IT_FMP0);
    }
}

3. 关键点说明

1.中断标志检查:

在中断服务函数中,首先检查 CAN1 的中断标志,然后检查 CAN2 的中断标志。

使用 CAN_GetITStatus 函数检查中断标志。

2.清除中断标志:

在处理完中断后,必须清除相应的中断标志,否则会重复进入中断。

使用 CAN_ClearITPendingBit 函数清除中断标志。

3.中断优先级:

如果同时启用了 CAN1 和 CAN2 的中断,需要确保它们的优先级设置合理。

4. 总结

CAN1 和 CAN2 共享中断向量:在 STM32F103C8T6 中,CAN1 和 CAN2 的接收中断共享同一个中断向量 USB_LP_CAN1_RX0_IRQn。

中断服务函数的实现:在中断服务函数中,需要检查 CAN1 和 CAN2 的中断标志,并分别处理。

清除中断标志:处理完中断后,必须清除相应的中断标志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值