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
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.