2017-08-15 1 views
0

J'essaie d'utiliser le périphérique de minuterie dans STM32L073 mais j'ai des problèmes. J'ai généré le code d'installation dans STM32Cube et j'utilise uniquement les fonctions fournies par l'API HAL. Le problème est que l'interruption de minuterie se produit seulement une fois et elle devrait toujours se produire alors elle déborde. Je ne sais pas si la minuterie est en cours d'exécution ou si ma configuration est incorrecte (ce qui ne devrait pas être le cas puisque j'utilise le code généré par Cube). Quelqu'un peut-il aider?STM32 Timer Interruptions

Ceci est appelé dans le principal avant while

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 Méthode

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 */ 
    } 
} 

Puis, en principal que j'appelle cette

HAL_TIM_Base_Start_IT(&htim7); 

qui fait cette

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; 
} 

et mon gestionnaire appelle PeriodElapsedCallback Interrompre

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

Il compile il n'y a pas d'erreurs pas d'avertissement, dans le débogueur que je vois cette interruption est déclenchée qu'une seule fois et jamais. Dans l'attente de réponses

P.S. à l'aide SEGGER intégré studio

Répondre

1

Votre débordement se produit chaque horloge que vous n'avez pas défini ARR

+0

et c'est pourquoi vous ne devriez pas faire quelque chose de nouveau après minuit .. Merci –

1

Tout d'abord vous devez définir ces paramètres à votre période de destination

Prescaler pour la source d'horloge (vérifiez le quel bus):

htim7.Init.Prescaler = 00; 

Combien minuterie doit compter pour ISR se produit:

htim7.Init.Period = 00; 
+0

Oui, c'est aussi une bonne réponse. Si bête de moi ... Merci –