Я работаю над проектом (управляю степперами) и постоянно получаю Hardfault Errors. Отладчик заявляет, что void hardfault вызывается изнутри "HAL_TIM_IQRHandler".
Я не понимаю, почему это могло произойти.
Я проверил: 1. Размер стека и кучи 2.if void TIM4_IQRHandler занимает больше времени, чем период, который он вызывается в 3. если произошла ошибка указателя 4. другой mcu
Я использую stm32f103c8 и CubeIDE.
Код: 'void TIM4_IRQHandler (void) { / * КОД ПОЛЬЗОВАТЕЛЯ НАЧАЛО TIM4_IRQn 0 * /
/* USER CODE END TIM4_IRQn 0 */
HAL_TIM_IRQHandler(&htim4);
/* USER CODE BEGIN TIM4_IRQn 1 */
c++; //Frame No.
if (flag_m != 0 || c >= 100) { // new buffer
c = 0;
frame_ac_fin(pwm_buffer); // old frame was finished
pwm_buffer = get_frame_r(pwm_buffer, flag_buffer); //get new frame /returns NULL when no new data
if (pwm_buffer == NULL) {
flag_m = 1; // no frame
} else {
flag_m = 0; // new frame
}
} else {
//HAL_TIM_PWM_ConfigChannel(&htim1, sConfig, Channel)
HAL_TIM_Base_Stop(&htim1);
HAL_TIM_Base_Stop(&htim3);
if (pwm_buffer[c] == 0) {
pwm_buffer[c] = 1; //Edit
}
if (pwm_buffer[100 + c] == 0) {
pwm_buffer[100+c] = 1; //Edit
}
TIM3->PSC = pwm_buffer[c]; // M left
TIM1->PSC = pwm_buffer[100 + c]; // M right
HAL_TIM_Base_Start(&htim1);
HAL_TIM_Base_Start(&htim3);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
if (pwm_buffer[c] == 0 && pwm_buffer[c + 100] == 0) { //End of buffer/frame
flag_m = 1;
}
}
/* USER CODE END TIM4_IRQn 1 */
} '
TIMER init - это стандартный код CubeIDE / CubeMx