CAN 작업중에 CubeMx의 HAL 함수 단에서 DeInit과 Init을 해도 CAN Register가 초기화가 안됨.
특히 CAN 오류 발생시 ESR Register들의 값들이 DeInit또는 Init후 그대로 남아 있음.
HAL_StatusTypeDef HAL_CAN_Init(CAN_HandleTypeDef *hcan)
HAL_StatusTypeDef HAL_CAN_DeInit(CAN_HandleTypeDef *hcan)
MspInit/DeInit에서 CLK 관련 매크로들이 호출 되어 이상 없는 듯 했으니 그건 아니고...
"CAN_MCR_RESET" Define이 포함되어 있어 당연히 Reset이 될것 같으나 그것도 아니고..
void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan)
void HAL_CAN_MspDeInit(CAN_HandleTypeDef* hcan)
__HAL_RCC_CAN1_CLK_ENABLE();
__HAL_RCC_CAN1_CLK_DISABLE();
SET_BIT(hcan->Instance->MCR, CAN_MCR_RESET);
아래와 같은 매크로 사용자가 수동으로 호출을 해서 CAN Register 초기화 필요함. 필요시....
__HAL_RCC_CAN1_FORCE_RESET();
__HAL_RCC_CAN1_RELEASE_RESET();
이건 CAN관련 뿐만이 아니라 다른 Peripheral Register도 마찬가지
하고 싶은 이야기는 HAL 드라이버의 Init/DeInit을 해도 관련 Peripheral Register가 HW적으로 리셋되는건 아니라는것..
수고..........
'Technical Tips!!' 카테고리의 다른 글
[TT] STM32 CubeIDE 단축키 설정 (Shortcut/Binding) (0) | 2020.03.04 |
---|---|
[TT] STM32 CubeIDE freertos + printf 문제 해결 (1) | 2020.02.13 |
[TT] STM32F10x Series CAN USB 동시 사용 불가 (0) | 2015.12.18 |
[TT] STM32 Reset 관련 (0) | 2015.12.07 |
[TT] Cortex Peripheral bit-banding (STM32 GPIO Bitband) (0) | 2015.07.08 |