新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于STM32中CAN1_RX0_IRQn和CAN1_RX1_IRQn的使用

        關于STM32中CAN1_RX0_IRQn和CAN1_RX1_IRQn的使用

        作者: 時間:2016-11-19 來源:網絡 收藏
        “如果你用的CAN引腳是PA11和PA12,接收中斷用CAN1_RX0_IRQn。如果CAN引腳用的是PB8和PB9,也就是用重定義的引腳,接收中斷用CAN1_RX1_IRQn。由于PA11和PA12也是USB的引腳,所以非互聯型且帶CAN控制器的微控制器的庫文件在起名字時用了USB_LP_CAN1_RX0_IRQn。”

        以上內容參考于網絡,后經證實,以上說法是不正確的,理由如下:

        本文引用地址:http://www.104case.com/article/201611/318094.htm

        STM32有2個3級深度的接收緩沖區:FIFO0和FIFO1,每個FIFO都可以存放3個完整的報文,它們完全由硬件來管理。如果是來自FIFO0的接收中斷,則用CAN1_RX0_IRQn中斷來處理。如果是來自FIFO1的接收中斷,則用CAN1_RX1_IRQn中斷來處理。在CAN的初始化配置過程中,用CAN_FilterFIFOAssignment來選擇要使用FIFO。

        示例如下:

        1. 配置過濾器
        CAN_FilterInitStructure.CAN_FilterNumber = 0;

        CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;

        CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;

        CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;

        CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;

        CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;

        CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;

        CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; //關聯FIFO0

        CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;

        CAN_FilterInit(&CAN_FilterInitStructure);


        CAN_FilterInitStructure.CAN_FilterNumber = 14;

        CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 1; //關聯FIFO1

        CAN_FilterInit(&CAN_FilterInitStructure);

        2. 開啟CAN中斷

        /* IT Configuration for CAN1 */

        CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);

        CAN_ITConfig(CAN1, CAN_IT_FMP1, ENABLE);

        /* IT Configuration for CAN2 */

        CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);

        CAN_ITConfig(CAN2, CAN_IT_FMP1, ENABLE);

        3. 中斷處理函數


        void CAN1_RX0_IRQHandler(void)

        {
        CAN_Receive(CAN1, CAN_FIFO0, &CAN1_RxMsg);

        //
        }


        void CAN1_RX1_IRQHandler(void)

        {
        CAN_Receive(CAN1, CAN_FIFO1, &CAN1_RxMsg);

        //
        }

        void CAN2_RX0_IRQHandler(void)

        {

        CAN_Receive(CAN2, CAN_FIFO0, &CAN2_RxMsg);
        //
        }


        void CAN2_RX1_IRQHandler(void)

        {
        CAN_Receive(CAN2, CAN_FIFO1, &CAN2_RxMsg);
        //
        }



        關鍵詞: STM32CA

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 河南省| 米林县| 秦安县| 邳州市| 广西| 青州市| 高雄县| 金湖县| 绍兴县| 太康县| 兴业县| 六盘水市| 天津市| 黄骅市| 延庆县| 沙田区| 八宿县| 易门县| 佛山市| 从化市| 德州市| 阿拉善左旗| 资兴市| 修水县| 巩留县| 西峡县| 呼伦贝尔市| 沧州市| 桃源县| 香港 | 峨山| 莱阳市| 徐州市| 德江县| 中西区| 河间市| 石狮市| 平果县| 福贡县| 渭南市| 米泉市|