2017-08-15 4 views
0

Ich versuche, Timer-Peripheriegeräte in STM32L073 zu verwenden, aber ich habe Probleme. Ich habe Setup-Code in STM32Cube generiert und nur Funktionen verwendet, die HAL API bereitstellt. Problem ist, dass der Timer-Interrupt nur einmal auftritt und immer dann auftreten sollte, wenn er überläuft. Ich weiß nicht, ob der Timer überhaupt läuft oder mein Setup falsch ist (was ich glaube, dass es nicht sein sollte, da ich Cube generierten Code verwende). Jeder kann helfen?STM32 Timer Interrupts

Dies vor in Haupt aufgerufen wird, während Schleife

void MX_TIM7_Init(void){ 

TIM_ClockConfigTypeDef sClockSourceConfig; 
TIM_MasterConfigTypeDef sMasterConfig; 

htim7.Instance = TIM7; 
htim7.Init.Prescaler = 00; 
htim7.Init.CounterMode = TIM_COUNTERMODE_UP; 
htim7.Init.Period = 00; 
if (HAL_TIM_Base_Init(&htim7) != HAL_OK) { 
    Error_Handler(); 
    } 

sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; 
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; 
if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK){ 
    _Error_Handler(__FILE__, __LINE__); 
    } 

} 

BaseMspInit Methode

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle){ 

if(tim_baseHandle->Instance==TIM7){ 
/* USER CODE BEGIN TIM7_MspInit 0 */ 

/* USER CODE END TIM7_MspInit 0 */ 
/* Peripheral clock enable */ 
__HAL_RCC_TIM7_CLK_ENABLE(); 

/* TIM7 interrupt Init */ 
HAL_NVIC_SetPriority(TIM7_IRQn, 0, 0); 
HAL_NVIC_EnableIRQ(TIM7_IRQn); 
/* USER CODE BEGIN TIM7_MspInit 1 */ 

/* USER CODE END TIM7_MspInit 1 */ 
    } 
} 

Dann in Haupt dieses

Ich nenne
HAL_TIM_Base_Start_IT(&htim7); 

die diese

HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim){ 
/* Check the parameters */ 
assert_param(IS_TIM_INSTANCE(htim->Instance)); 

/* Enable the TIM Update interrupt */ 
__HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); 

/* Enable the Peripheral */ 
__HAL_TIM_ENABLE(htim); 

/* Return function status */ 
return HAL_OK; 
} 
tut

und meine Interrupt-Handler ruft PeriodElapsedCallback

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { 
    HAL_GPIO_TogglePin(led_GPIO_Port, led_Pin); 
    } 

Es kompiliert es keine Fehler gibt keine Warnung, in Debugger sehe ich diese Unterbrechung nur einmal ausgelöst wird, und dann nie. Freu mich auf Antworten

P.S. mit SEGGER Embedded Studio

Antwort

1

Ihr Überlauf geschieht, wie Sie jede Uhr nicht ARR

gesetzt haben
+0

und deshalb sollten Sie nach Mitternacht nichts Neues machen. Danke –

1

Zunächst müssen Sie diese Parameter zu Ihrem Ziel Periode eingestellt

Vorteiler für die Taktquelle (siehe Info welchen Bus):

htim7.Init.Prescaler = 00; 

Wie viel Timer für ISR zählen muss auftritt:

htim7.Init.Period = 00; 
+0

Ja, das ist auch die richtige Antwort. So dumm von mir ... Danke –