STM32F4 CANbus -2 init yardım

Başlatan magnetron, 14 Mart 2024, 12:56:34

magnetron

merhaba forum,

STM32F4 işlemcide SPL library kullanıyorum
burada CAN1 init fonksiyonunu kopyalayıp 2.ci CAN ı aktifleştirmek istiyorum

yalnız init fonksiyonun içinde birşey dikkatimi çekti

    /* CAN filter yapılandırması*/
    //Veriye herhangi bir filtre koymadığım için bütün filtre mask değerleri 0 yaptım
    CAN_FilterInitStructure.CAN_FilterNumber = 10;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterIdHigh = 0x20<<5;
    CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x20<<5;
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);

burada son satırdaki Filterinit fonksiyonuna CAN periferal adı girilmemiş

ben şimdi 2.ci CAN init ettiğimde gene bu fonksiyonu kopyalarsam 2 CAN arasında çakışma olur mu ?
demek istediğim bu filtreler her iki CAN periferal için ortak mı yoksa her CAN kendi filtreleri mi var

inşallah derdimi anlatabildim  :du:
teşekkür



Tagli

Kütüphaneyi bilmiyorum ama filtre bloğu iki CAN donanımı arasında ortak paylaşılıyor. Blok sanki CAN1 altında gibi erişiliyor, ancak CAN2 de aynısını kullanıyor. Fakat, mevcut Filter Bank'leri aralarında paylaşıyorlar. CAN_FMR register'ı içindeki CANSB bitleri, ilk kaç Filter Bank'ının CAN1'e ayrılacağını belirliyor. Kalanlar da CAN2'nin oluyor.

Bu bahsettiğim ayar kütüphanede nasıl yapılıyor bilmiyorum ama muhtemelen CAN_FilterInitStructure içinde değildir. Global bir ayar çünkü. Eğer bir ayar yapılmazsa sanırım varsayılan ayar olarak bankları yarı yarıya paylaşıyorlar. Mesela 28 bank varsa (F4'lerdeki sayı bu galiba) ilk 14'ü CAN1'in, son 14'ü CAN2'nin oluyor.
Gökçe Tağlıoğlu