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