STM32f2 & can (maska)

Jan Smrz jan.smrz na email.cz
Pondělí Leden 11 17:32:44 CET 2016


Pokud vam pomuze muj kod pro F4 s 16-bit filtrovanim. F2 je snad podobna.

    // CAN Filter
    // 16bit, idendifier mask (= 2 IDs)
    // Filter fields: <STID[15:8> <STID[2:0]><RTR><IDE><EXID[17:15]>
    sFilterConfig.FilterNumber = 0;                // filter ID to be 
initialized (0-27)
    sFilterConfig.BankNumber = 28;                // start slave bank (CAN2) 
filters (0-28); 28 = no filters for CAN2
    sFilterConfig.FilterFIFOAssignment = CAN_FIFO0; // FIFO
    sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
    sFilterConfig.FilterScale = CAN_FILTERSCALE_16BIT;
    sFilterConfig.FilterActivation = ENABLE;
    sFilterConfig.FilterIdLow = (0x201 << 5);
    sFilterConfig.FilterMaskIdLow = 0xFFE0;        // ID match only
    sFilterConfig.FilterIdHigh = (0x4B0 << 5);
    sFilterConfig.FilterMaskIdHigh = 0xFFE0;        // ID match only
    HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig);

Rozdil proti vasemu kodu tam vidim (krome jineho) v BankNumber a ze 
nenastavujete FilterMode.


J.S.



On 01/11/2016 03:42 PM, Josef Štengl wrote:
> Ahoj,
>   mám vygenerovaný projekt z CUBE a rozběhaný CAN. Problém je, že pokud se mu 
> cokoliv jiného než nulu pokusím dát do nastavení masky, tak mi to nepřijme CAN 
> paket. Neví někdo, jestli je to vlastnost nebo něco dělám chybně?
>
> Obešel jsem to tak, že kontroluji CAN ID při příjmu, v tomto projektu to 
> nevadí. Ale tak nějak je mi to přijde ... nepěkné :-).
>
>
>
> #define CAN_ID_BASE         ((uint32_t)0x0AAA0100u)
> #define CAN_RX_MASK         ((uint32_t)0x1FFFFFC0u)
> #define CAN_ID_MASTER_BIT   ((uint32_t)0x00001000u)
>
>
> void
> cancomInit(uint8_t CardId)
> {
>   cancomCardId_u8 = CardId;
>
>   /* can filter configuration */
>   cancomTx_s.StdId = 0u;
>   cancomTx_s.ExtId = CAN_ID_BASE | CAN_ID_MASTER_BIT | cancomCardId_u8;
>   cancomTx_s.IDE   = CAN_ID_EXT;
>   cancomTx_s.RTR   = CAN_RTR_DATA;
>   cancomTx_s.DLC   = 8u;
>
>   hcan1.pTxMsg = &cancomTx_s;
>   hcan1.pRxMsg = &cancomRx_s;
>   /* CAN RX filter - bank 0 */
>   CAN_FilterConfTypeDef sFilterConfig =
>   {
>     .FilterScale = CAN_FILTERSCALE_32BIT,
>     .FilterActivation = ENABLE,
>     .BankNumber = 0u,   // always 0 - no can2 (slave (dual can)
>     .FilterNumber = 0u,
>     .FilterFIFOAssignment = 0u,
>     .FilterIdHigh = ((CAN_ID_BASE | CAN_ID_MASTER_BIT) >> 16),
>     .FilterIdLow  = ((CAN_ID_BASE | CAN_ID_MASTER_BIT) & 0xFFFFu),
>     .FilterMaskIdHigh = 0u,
>     .FilterMaskIdLow = 0u,
>     // Mask not works ??
>     //.FilterMaskIdHigh = (CAN_RX_MASK >> 16),
>     //.FilterMaskIdLow = (CAN_RX_MASK & 0xFFFFu),
>   };
>   HAL_CAN_ConfigFilter(&hcan1, &sFilterConfig);
> }
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list