概述
本章通过STM32CUBEIDE配置STM32F407的定时器TIM3输出比较中断
原理
TIM5定时器拥有多达4个独立通道,可用于输入捕获、输出比较、PWM 生成(边沿和中心对齐模式)、单脉冲模式输出。
发生以下事件时生成中断/DMA请求:
更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)
触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)
输出比较
其时基单元包括:计数器寄存器 (TIMx_CNT)、预分频器寄存器 (TIMx_PSC)、自动重载寄存器 (TIMx_ARR)


电平翻转时进入中断
IDE操作
如图所示,我以TIM3的输出比较中断为例,设置的每次增加的点数为100,每加100实现电平的翻转,同时实现中断,在输出比较模式下,ARR的值并没有很大关系,一般情况下设置为65535,。
设置输出比较模式
分频2系数为84,时钟频率为84000000/84=1000000
这里的pulse我给的为100,频率为10k,1000,频率为1k(设为0也可以,但我一般初始化将其设为我频率对应的值)
模式为比较翻转模式
使能全局中断
使能捕获中断:
HAL_TIM_OC_Start_IT(&htim3,TIM_CHANNEL_1);
HAL_TIM_OC_Start_IT(&htim3,TIM_CHANNEL_2);
通过在中断回调函数里进行电平的翻转,来测其中断频率
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM3)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
{
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_4);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,(__HAL_TIM_GetCounter(htim)+100));//10Khz
}
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
{
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_3);
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,(__HAL_TIM_GetCounter(htim)+1000));//1Khz
}
}
}
电平翻转一次产生一次中断,对应中断频率为10k
电平翻转一次产生一次中断,对应中断频率为1k