▶ STM32/개발환경
STM32에서 Hardfault 만들기
좋은아침페스츄리
2024. 1. 17. 14:35
우리가 아주 끔찍하게 싫어하는 Hardfault를 임의로 만들어 보겠습니다.
아래 코드를 넣으면 PC가 수행할 수 없는 주소로 변경되면서 Hardfault로 Jump 하게됩니다.
typedef void (*Function_Pointer)(void);
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
/* USER CODE BEGIN 2 */
Function_Pointer Wrong_Address_Function;
Wrong_Address_Function = (Function_Pointer)(*(__IO uint32_t *)(0xFF000000));
Wrong_Address_Function();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
Wrong_Address_Function을 실행하면 아래처럼 Hardfault Handler로 진입하게 됩니다. 물론 Wrong_Address_Function에 실행될 수 없는 Address를 asign 해주어야 합니다.

Hardfault Handler가 제대로 처리되는지 확인 할 때나 혹은 Hardfault 발생시 언스태킹을 추척하는 공부용으로 사용할 수 있을 거 같습니다.
감사합니다.