基本定时器6/7就只有定时功能和单脉冲模式,没有PWM,输入捕获。。。其他功能。
首先是激活定时器6
然后配置定时器参数
第一个是预分频器,把定时器时钟源分频
第二个是计数模式,向上计数
第三个计数周期值,当计数器从0计数到周期值则会产生中断,然后从0开始重新计数
第四个是否重装载,这个在基本定时器没用。
第五个是触发输出事件选择
时钟树
定时器时钟频率
现在计算溢出时间
在打开中断功能,并设置好中断优先级
然后是生成代码
我们要使用中断函数的时候必须增加回调函数,回调函数分很多如
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
我这边使用的是
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM6)
{
// 你要执行的中断指令
}
}
然后在定时器初始化函数里面启动定时器,启动的方式有三种,看需要选择
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim);
/* Non-Blocking mode: Interrupt */
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim);
/* Non-Blocking mode: DMA */
HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, const uint32_t *pData, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim);
我这边选择已中断方式启动
HAL_TIM_Base_Start_IT(&htim6); //以中断方式启动定时器
这样基本定时器就配置完了。
只为记录开发流程,如有错误,前留言指点。