STM32f2 & can (maska)
Josef Štengl
ok1ced na nagano.cz
Pondělí Leden 11 15:42:51 CET 2016
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);
}
Další informace o konferenci Hw-list