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 nenneHAL_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
und deshalb sollten Sie nach Mitternacht nichts Neues machen. Danke –