OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3120|回复: 2

关于输入捕捉的,有些问题,求大神解答

[复制链接]

11

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
181
金钱
181
注册时间
2015-7-30
在线时间
50 小时
发表于 2015-9-24 10:19:48 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]我照着例子改写了下,发现while里面的“if”进不去!!一直找不出哪里有问题,求助![/mw_shl_code] [mw_shl_code=c,true]pwm输出是可以的,就没贴出来了[/mw_shl_code] [mw_shl_code=c,true]TIM_ICInitTypeDef TIM4_ICInitStructure; void TIM4_Cap_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_ResetBits(GPIOD,GPIO_Pin_14); TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler =psc; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); TIM4_ICInitStructure.TIM_Channel = TIM_Channel_3; TIM4_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM4_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM4_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM4_ICInitStructure.TIM_ICFilter = 0x00; TIM_ICInit(TIM4, &TIM4_ICInitStructure); NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); TIM_ITConfig(TIM4,TIM_IT_Update|TIM_IT_CC3,ENABLE); TIM_Cmd(TIM4,ENABLE ); } u8 TIM4CH3_CAPTURE_STA=0; //输入捕获状态 u16 TIM4CH3_CAPTURE_VAL; //输入捕获值 //定时器5中断服务程序 void TIM4_IRQHandler(void) { if((TIM4CH3_CAPTURE_STA&0X80)==0)//还未成功捕获 { if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) { if(TIM4CH3_CAPTURE_STA&0X40)//已经捕获到高电平了 { if((TIM4CH3_CAPTURE_STA&0X3F)==0X3F)//高电平太长了 { TIM4CH3_CAPTURE_STA|=0X80;//标记成功捕获了一次 TIM4CH3_CAPTURE_VAL=0XFFFF; }else TIM4CH3_CAPTURE_STA++; } } if (TIM_GetITStatus(TIM4, TIM_IT_CC3) != RESET)//捕获1发生捕获事件 { if(TIM4CH3_CAPTURE_STA&0X40) //捕获到一个下降沿 { TIM4CH3_CAPTURE_STA|=0X80; //标记成功捕获到一次上升沿 TIM4CH3_CAPTURE_VAL=TIM_GetCapture3(TIM4); TIM_OC3PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获 }else //还未开始,第一次捕获上升沿 { TIM4CH3_CAPTURE_STA=0; //清空 TIM4CH3_CAPTURE_VAL=0; TIM_SetCounter(TIM4,0); TIM4CH3_CAPTURE_STA|=0X40; //标记捕获到了上升沿 TIM_OC3PolarityConfig(TIM4,TIM_ICPolarity_Falling); //CC1P=1 设置为下降沿捕获 } } } TIM_ClearITPendingBit(TIM4, TIM_IT_CC3|TIM_IT_Update); //清除中断标志位 } [/mw_shl_code]


extern u8  TIM4CH3_CAPTURE_STA; //输入捕获状态    
extern u16 TIM4CH3_CAPTURE_VAL;

int main(void)
 {
u32 temp = 0;
delay_init();      
NVIC_Configuration();
uart_init(115200);    
  TIM3_PWM_Init(1799,3);

  TIM4_Cap_Init(0xffff,71);
    
    while(1)
{

delay_ms(10);
TIM_SetCompare1(TIM3,900);
printf("1\r\n" );
        if(TIM4CH3_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
{
printf("3333\r\n" );
temp=TIM4CH3_CAPTURE_STA&0X3F;
temp*=65536;
temp+=TIM4CH3_CAPTURE_VAL;
printf("HIGH:%d us\r\n",temp);
TIM4CH3_CAPTURE_STA=0;
}
printf("5\r\n" );   
}  
 }


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-24 22:59:53 | 显示全部楼层
说明你的if没满足,去看为什么没满足.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5781
金钱
5781
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-9-24 23:07:37 | 显示全部楼层
TIM4 CH3  默认不在PD14   需要冲映射
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 10:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表