[英]Interrupt on STM32 F4
當我試圖運行一個簡單的中斷服務例程時,我遇到了硬故障。
我已經初始化了定時器 7:
void configur_TIM7(void);
void configur_TIM7(void){
RCC->APB1ENR|=RCC_APB1ENR_TIM7EN;
TIM7->PSC=18000-1;
TIM7->ARR=10000-1; // Clock set at 180Mhz, so TIM7 triggers each Hz
TIM7->DIER|=TIM_DIER_UIE;
NVIC_SetPriority(TIM7_IRQn, 0);
NVIC_EnableIRQ(TIM7_IRQn);
TIM7->CR1|=TIM_CR1_CEN;
}
void TIM7_IRQHandler(void){
TIM7 -> SR=0;
scaduto=1;
}
如您所見,每次觸發中斷時,處理程序都應將變量“scaduto”設置為 1。 我試圖將“scaduto”定義為 int(而不是 volatile int)。
問題是程序在遇到 SIGTRAP 斷點之前只執行一次迭代。
我主要寫了這個:
int main(void)
{
/* USER CODE BEGIN 1 */
MPU_ConfigTypeDef MPU_Config;
/* 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 */
MX_GPIO_Init();
MX_USART2_UART_Init();
MX_I2C1_Init();
/* USER CODE BEGIN 2 */
MPU_Config.Clock_Source = INTERNAL_8MHz;
MPU_Config.Config_Dlpf = DLPF_184A_188G_Hz;
MPU_Config.Gyro_Full_Scale = FS_SEL_2000;
MPU_Config.Accel_Full_Scale = AFS_SEL_4g;
MPU_Config.Sleep_Mode_Bit = 0; //1: sleep mode, 0: normal mode
MPU6050_Init(&hi2c1, &MPU_Config); // Initialization - Configuration
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
return scaduto;
scaduto=0;
//scaduto=0;
// MPU6050_Read_RawData(&Accel_Raw, &Gyro_Raw);
// MPU6050_Read_ScaledData(&Accel_Scaled, &Gyro_Scaled);
//
// Acx=Accel_Scaled.x;
// Acy=Accel_Scaled.y;
// Acz=Accel_Scaled.z;
/* USER CODE BEGIN 3 */
/* USER CODE END 3 */
}
}
(所有MPU的東西都需要在項目的后期)
在此先感謝您的幫助!
首先,在你的 main() 中你做了一些奇怪的事情。
while (1)
{
/* USER CODE END WHILE */
return scaduto;
scaduto=0;
...
}
您的 main() function 返回。 它不應該那樣做。 所以刪除 return 語句,它在那里沒有邏輯意義。 到目前為止,您的代碼甚至從未達到MPU6050_Read_RawData
。 看起來你想在那里有其他東西,但你錯誤地把 return 語句放在那里。 我幾乎可以肯定這就是造成硬故障的原因。
作為旁注,您的計時器(可能)未配置為 1Hz。 定時器的基本時鍾是 APB 時鍾 x2(查看參考手冊的 RCC 部分),它與核心時鍾無關。 所以如果你的 MCU 是 108MHz,但你的 APB 時鍾是 27MHz,那么你的定時器的基本時鍾是 54MHz,你將不得不相應地調整預分頻器和重新加載值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.