STM32定时器中断

时间:2017-08-15 22:21:04

标签: timer interrupt stm32

我正在尝试在STM32L073中使用定时器外设,但我遇到了问题。 我在STM32Cube中生成了设置代码,并且只使用了HAL API提供的函数。问题是定时器中断只发生一次,它应该始终发生溢出。我不知道计时器是否正在运行或我的设置是错误的(我相信它不应该是因为我使用Cube生成的代码)。有人可以帮忙吗?

这在while while 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方法

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

然后在主要我称之为

HAL_TIM_Base_Start_IT(&htim7);

正在这样做

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

我的中断处理程序调用PeriodElapsedCallback

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

它编译没有错误没有警告,在调试器中我看到这个中断只触发一次然后从不。期待答案

P.S。使用SEGGER Embedded Studio

2 个答案:

答案 0 :(得分:1)

由于未设置ARR

,因此每个时钟都会发生溢出

答案 1 :(得分:1)

首先,您需要将这些参数设置为目的地期间

预分频器用于时钟源(检查哪个总线):

htim7.Init.Prescaler = 00;

ISR需要计算多少计时器:

htim7.Init.Period = 00;