永发信息网

stm32输入捕获进不了中断

答案:2  悬赏:50  手机版
解决时间 2021-12-25 08:16
  • 提问者网友:轮囘Li巡影
  • 2021-12-24 17:19
#include "input.h"
#include "stdio.h"
u8 TIM5CH1_CAPTURE_STA;
u16 TIM5CH1_CAPTURE_VAL;
void input_init()
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_ICInitTypeDef TIM5_ICInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);

TIM_ClearITPendingBit(TIM5,TIM_IT_Update|TIM_IT_CC1);

TIM_TimeBaseInitStructure.TIM_Period = 0xffff;
TIM_TimeBaseInitStructure.TIM_Prescaler = 71;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStructure);

TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1;
TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM5_ICInitStructure.TIM_ICFilter = 0x00; TIM_ICInit(TIM5, &TIM5_ICInitStructure);

NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

TIM_Cmd(TIM5,ENABLE); //ʹÄÜTIM5ÍâÉè
TIM_ITConfig(TIM5, TIM_IT_Update|TIM_IT_CC1, ENABLE );
}
void TIM5_IRQHandler()
{
if(TIM5CH1_CAPTURE_STA&&0x80==0)
{
if(TIM_GetITStatus(TIM5,TIM_IT_Update)!=0)
{
if(TIM5CH1_CAPTURE_STA&0x40)
{
if(TIM5CH1_CAPTURE_STA&&0x3f==0x3f)
{
TIM5CH1_CAPTURE_STA|=0x80;
TIM5CH1_CAPTURE_VAL=0xffff;
}
else
{
TIM5CH1_CAPTURE_STA++;
}
}
}

if(TIM_GetITStatus(TIM5,TIM_IT_CC1)!=0)
{
if(TIM5CH1_CAPTURE_STA&0x40)
{
TIM5CH1_CAPTURE_STA|=0x80;
TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5);
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling);
}
else
{
TIM5CH1_CAPTURE_STA=0;
TIM5CH1_CAPTURE_VAL=0;
TIM_SetCounter(TIM5,0);
TIM5CH1_CAPTURE_STA|=0x40;
TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising);
}
}
}
TIM_ClearITPendingBit(TIM5,TIM_IT_Update|TIM_IT_CC1);

}
错了 是不停进中断
最佳答案
  • 五星知识达人网友:洒脱疯子
  • 2022-01-10 04:59
一直进入中断,说明你的中断标志位没有清除.

你在中断里面打印一下sr的值,看看是什么类型的中断.
全部回答
  • 1楼网友:从此江山别
  • 2022-01-10 06:37
意思是通过tim捕获脉冲(这里可以设置为边沿,上升沿,下降沿)计数,当个数达到你设定值的时候产生一个捕获中断,你可以在中断里面写你要执行的代码。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯