[STM32] STM32 FDCAN 통신 간단한 사용법!!
Embeded/STM322024. 4. 27. 23:04
반응형
STM32를 사용한 FDCAN 간단한 사용법입니다
FDCAN 통신에 관한 설명은 검색하면 많으니 생략하고 소스만 간단히 설명하려고 합니다
초기화 코드는 CUBEMX에서 자동으로 만들어 주니 무시하고
비트레이트는 계산하기 힘드니 아래 사이트를 참고 하시면 도움이 될듯합니다
http://www.bittiming.can-wiki.info/
먼저 원하는 ID의 데이터만 받길 원할 경우 필터 설정을 합니다
(필요 없을 경우 하지 않아도 됩니다)
FDCAN_FilterTypeDef sFilterConfig;
FDCAN_TxHeaderTypeDef TxHeader;
FDCAN_FilterTypeDef sFilterConfig;
sFilterConfig.IdType = FDCAN_STANDARD_ID;
sFilterConfig.FilterIndex = 0;
sFilterConfig.FilterType = FDCAN_FILTER_MASK;
sFilterConfig.FilterConfig = FDCAN_FILTER_TO_RXFIFO0;
sFilterConfig.FilterID1 = 0x123;
sFilterConfig.FilterID2 = 0x125;
if (HAL_FDCAN_ConfigFilter(&hfdcan1, &sFilterConfig) != HAL_OK) {
Error_Handler();
}
if (HAL_FDCAN_ConfigGlobalFilter(&hfdcan1, FDCAN_REJECT, FDCAN_REJECT,
FDCAN_FILTER_REMOTE, FDCAN_FILTER_REMOTE) != HAL_OK) {
Error_Handler();
}
// 수신인터럽트 설정
if (HAL_FDCAN_ActivateNotification(&hfdcan1, FDCAN_IT_RX_FIFO0_NEW_MESSAGE,
0) != HAL_OK) {
Error_Handler();
}
그리고 보낼 데이터를 설정하고 실제로 보냅니다
uint8_t TxData0[] = { 0x11, 0x32, 0x54, 0x76, 0x98, 0x00, 0x11, 0x22}; // 보낼데이터
// FDCAN 시작
if (HAL_FDCAN_Start(&hfdcan1) != HAL_OK) {
Error_Handler();
}
// 보낼 데이터 설정
TxHeader.Identifier = 0x123;
TxHeader.IdType = FDCAN_STANDARD_ID;
TxHeader.TxFrameType = FDCAN_DATA_FRAME;
TxHeader.DataLength = FDCAN_DLC_BYTES_8; // 데이터 길이
TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
TxHeader.BitRateSwitch = FDCAN_BRS_ON;
TxHeader.FDFormat = FDCAN_FD_CAN;
TxHeader.TxEventFifoControl = FDCAN_STORE_TX_EVENTS;
TxHeader.MessageMarker = 0x52;
// 데이터 전송
if (HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan1, &TxHeader, TxData0) != HAL_OK) {
Error_Handler();
}
수신부분은 인터럽트로 받을 수 있습니다
필터링을 하지 않고 전체 다 수신시 헤더를 확인해서 수신 id를 확인할 수도 있습니다
void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs) {
if ((RxFifo0ITs & FDCAN_IT_RX_FIFO0_NEW_MESSAGE) != 0) {
if (HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &RxHeader, RxData)
!= HAL_OK) {
Error_Handler();
}
if (hfdcan->Instance == FDCAN1) {
if (RxHeader.Identifier == 0x444) {
int z = 0;
}
} else /* FDCAN2 */
{
}
}
}
반응형
'Embeded > STM32' 카테고리의 다른 글
[STM32] STM32 TM1637로 세그먼트(7-segment) 제어하기!! (0) | 2025.01.08 |
---|---|
[STM32] STM32 LL 드라이버 UART 송신(TX) 방법!! (1) | 2022.12.01 |
[STM32] STM32 LL 드라이버 LL_mDelay함수 동작 안하는 문제!! (0) | 2022.11.27 |
[STM32] STM32CubeMX, CubeIDE 주석 한글 깨짐 문제 해결 방법!! (0) | 2022.07.22 |
[STM32] 맥(MAC)에서 STM32CubeMX 설치 안될때!! (0) | 2022.07.06 |