/ 필터 설정 (모든 메시지 수신 허용)
// CAN 필터 설정 함수
void CAN2_Filter_Config(void)
{
// CAN_FilterTypeDef sFilterConfig;
CAN_FilterTypeDef song;
song.FilterBank = 14; // CAN2는 14번 이상을 사용 == 요게 매우 중요함
song.FilterMode = CAN_FILTERMODE_IDMASK;
song.FilterScale = CAN_FILTERSCALE_32BIT;
song.FilterIdHigh = 0x0000;
song.FilterIdLow = 0x0000;
song.FilterMaskIdHigh = 0x0000;
song.FilterMaskIdLow = 0x0000;
song.FilterFIFOAssignment = CAN_FILTER_FIFO0;
song.FilterActivation = ENABLE;
song.SlaveStartFilterBank = 14;
// HAL_CAN_ConfigFilter(&hcan2, &song);
if (HAL_CAN_ConfigFilter(&hcan2, &song) != HAL_OK)
{
Error_Handler();
}
}
// // 메시전송
void CAN2_Tx(void)
{
// 송신 세팅
TxHeader.DLC = 8;
TxHeader.StdId = 0x321;
TxHeader.IDE = CAN_ID_STD;
TxHeader.RTR = CAN_RTR_DATA;
uint32_t TxMailbox;
if (HAL_CAN_AddTxMessage(&hcan2, &TxHeader, TxData, &TxMailbox) != HAL_OK)
{
Error_Handler();
printf("tx error\r\n");
}
else printf("CAN2 TX OK\r\n");
}
// // 메시지 수신
void CAN2_Rx(void)
{
if (HAL_CAN_GetRxFifoFillLevel(&hcan2, CAN_RX_FIFO0) > 0)
{
if (HAL_CAN_GetRxMessage(&hcan2, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK)
{
printf("Can2 Rx = %s\r\n", RxData);
}
}
}
첨부파일첨부된 파일이 2개 있습니다.