2017-08-15 306 views
0

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

这就是所谓的在主前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嵌入式工作室

回答

1

你的溢出发生,因为您没有设置ARR

+0

这就是为什么你不应该在午夜之前做任何新的事情。谢谢 –

1

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

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

htim7.Init.Prescaler = 00; 

多少计时器需要计数ISR发生:

htim7.Init.Period = 00; 
+0

是的,这也是正确的答案。我很傻...谢谢你 –