使用STM32CubeMX和keil进行配置
STM32CubeMX的配置
STM32H750VBT6的基本定时器有TIM6,TIM7。根据参考手册可以知道使用的是APB1的时钟总线,时钟设置如下
可知时钟频率为240MHz,回到引脚配置界面,选择TIM6,选择Activated
想要配置20ms的定时器中断,计算公式为Prescaler/240M*CounterPeriod=20ms
Prescaler设置为24000,算出CounterPeriod=2000,auto-reload preload设置为Enable使能自动重装,其他的保持默认设置
在NVIC中使能中断并设置优先级
点击GENERATE CODE生成keil工程
Keil工程
在tim.c中对TIM6的初始化函数
void MX_TIM6_Init(void)
{
/* USER CODE BEGIN TIM6_Init 0 */
/* USER CODE END TIM6_Init 0 */
TIM_MasterConfigTypeDef sMasterConfig = {0};
/* USER CODE BEGIN TIM6_Init 1 */
/* USER CODE END TIM6_Init 1 */
htim6.Instance = TIM6;
htim6.Init.Prescaler = 24000;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 2000;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim6) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM6_Init 2 */
HAL_TIM_Base_Start_IT(&htim6); /* 使能定时器x和定时器x更新中断 */
/* USER CODE END TIM6_Init 2 */
}
在stm32h7xx_it.c中可以看到对tim6的中断处理函数
void TIM6_DAC_IRQHandler(void)
{
/* USER CODE BEGIN TIM6_DAC_IRQn 0 */
/* USER CODE END TIM6_DAC_IRQn 0 */
HAL_TIM_IRQHandler(&htim6);
/* USER CODE BEGIN TIM6_DAC_IRQn 1 */
/* USER CODE END TIM6_DAC_IRQn 1 */
}
最后在定时器中断的回调函数中进行自己的处理代码
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM6)
{
//对tim6的定时器中断处理
}
}
另外还有开启和关闭定时器的两个函数
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim)