本帖最后由 耶不耶 于 2018-10-12 16:59 编辑
先说问题,RDT0R的FMI位是通过的过滤器的编号,可是我在调试观测到hcan->pRxMsg->FMI=2,但是寄存器RDT0R中的FMI位等于0.
RDT0R的FMI和hcan->pRxMsg->FMI不一致
附上滤波器配置代码:
[mw_shl_code=c,true] CAN_FilterConfTypeDef sFilterConfig;
uint32_t StdId =0x321;
uint32_t ExtId =0x1800f001;
sFilterConfig.FilterNumber = 0;
sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.FilterIdHigh = StdId<<5;
sFilterConfig.FilterIdLow = 0|CAN_ID_STD;
sFilterConfig.FilterMaskIdHigh = ((ExtId<<3)>>16)&0xffff;
sFilterConfig.FilterMaskIdLow = (ExtId<<3)&0xffff|CAN_ID_EXT;
sFilterConfig.FilterFIFOAssignment = 0;
sFilterConfig.FilterActivation = ENABLE;
sFilterConfig.BankNumber = 14;
if(HAL_CAN_ConfigFilter(&hcan, &sFilterConfig) != HAL_OK)
{
Error_Handler();
}
sFilterConfig.FilterNumber = 1;
sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.FilterIdHigh = StdId<<5;
sFilterConfig.FilterIdLow = 0|CAN_ID_STD|CAN_RTR_REMOTE;
sFilterConfig.FilterMaskIdHigh = ((ExtId<<3)>>16)&0xffff;
sFilterConfig.FilterMaskIdLow = (ExtId<<3)&0xffff|CAN_ID_EXT;
sFilterConfig.FilterFIFOAssignment = 0;
sFilterConfig.FilterActivation = ENABLE;
sFilterConfig.BankNumber = 14;
if(HAL_CAN_ConfigFilter(&hcan, &sFilterConfig) != HAL_OK)
{
Error_Handler();
}[/mw_shl_code]
然而这两个不应该是一样的值吗?附上寄存器RDT0R的说明:
寄存器RDT0R
|