stm32f401 hal库开启系统滴答定时器中断
时间: 2023-08-03 17:02:39 浏览: 213
stm32定时器中断
好的,针对您的问题,可以按照以下步骤开启STM32F401的系统滴答定时器中断:
1. 首先,需要开启系统滴答定时器TIM6,使用HAL库函数进行初始化:
```c
// 定义TIM_HandleTypeDef类型的结构体变量
TIM_HandleTypeDef htim6;
// 初始化TIM6
void TIM6_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig = {0};
htim6.Instance = TIM6;
htim6.Init.Prescaler = 8399;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 999;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
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();
}
}
```
其中,TIM6_Init()函数是自定义的初始化函数,使用了宏定义的方式配置了预分频器,计数模式和自动重载,最终调用HAL_TIM_Base_Init()函数进行初始化。
2. 开启TIM6的中断,并编写中断服务函数,使用HAL库函数进行配置:
```c
// TIM6中断服务函数
void TIM6_DAC_IRQHandler(void)
{
HAL_TIM_IRQHandler(&htim6);
}
// 配置TIM6中断
void TIM6_ConfigInterrupt(void)
{
HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn);
HAL_TIM_Base_Start_IT(&htim6);
}
```
其中,TIM6_DAC_IRQHandler()是TIM6的中断服务函数,使用了HAL_TIM_IRQHandler()函数进行中断处理;TIM6_ConfigInterrupt()函数是配置TIM6中断的函数,使用了HAL_NVIC_SetPriority()函数设置中断优先级,使用了HAL_NVIC_EnableIRQ()函数开启中断,最终调用HAL_TIM_Base_Start_IT()函数开启TIM6的中断。
以上就是开启STM32F401的系统滴答定时器中断的步骤,希望能对您有所帮助。
阅读全文