TIM1输入捕获为什么进不了中断

TIM1输入捕获为什么进不了中断,第1张

void TIM1_IRQHandler(void)

{

printf("进入TIM1_IRQHandler\r\n")

TIM_ClearFlag(TIM1, TIM_IT_CC1)

}

这里出了问题。

函数名不是这样的

资料说:

EXPORT TIM1_BRK_IRQHandler[WEAK]

EXPORT TIM1_UP_IRQHandler [WEAK]

EXPORT TIM1_TRG_COM_IRQHandler[WEAK]

EXPORT TIM1_CC_IRQHandler [WEAK]

EXPORT TIM2_IRQHandler[WEAK]

EXPORT TIM3_IRQHandler[WEAK]

EXPORT TIM4_IRQHandler[WEAK]

显然TIM1的中断和其他不一样,所以中断函数改成:

void TIM1_CC_IRQHandler(void)

就没有问题了

TIM_DeInit(TIM1)//将外设TIM1寄存器重设为默认值

/*设置时间基准*/

TIM_TimeBaseStructure.TIM_Prescaler=0//时钟频率的预分频值

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up

TIM_TimeBaseStructure.TIM_Period=7200-1//自动重装载寄存器周期值

TIM_TimeBaseStructure.TIM_ClockDivision=0x0//时钟分割值

TIM_TimeBaseStructure.TIM_RepetitionCounter=0x0

TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure)//初始化TIM1的时间基数数据

TIM_ICInitStructure.TIM_Channel= TIM_Channel_1//选择通道2

TIM_ICInitStructure.TIM_ICPolarity= TIM_ICPolarity_Rising//上升沿

TIM_ICInitStructure.TIM_ICSelection= TIM_ICSelection_IndirectTI//通道方向选择

TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1/*每次检测到捕获输入就触发一次捕获 */

TIM_ICInitStructure.TIM_ICFilter=0x00/* 对分频率没有影响 选择输入比较滤波器*/

TIM_PWMIConfig(TIM1, &TIM_ICInitStructure)//根据参数配置TIM外设信息

TIM_SelectInputTrigger(TIM1, TIM_TS_TI1FP1)//选择IC1为始终触发源

TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Reset)//TIM从模式:触发信号的上升沿重新初始化计数器和触发寄存器的更新事件

TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable)//启动定时器的被动触发

TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE)//打开中断

TIM_Cmd(TIM1,ENABLE)}

// ***注意*** //TIM3时钟和SPI1时钟不能同时打开,否则TIM3的CH1、CH2不能输出PWM,但CH3、CH4能输出 //APB1ENR最好全部打开,否则TIM1在极偶尔情况下会不工作 另外,STM32中很多的IO都是复用,对于具备多个复用功能的IO要尤其小心,注意会不会...


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11692347.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存