完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
学习捕获章节发现:捕获一个按钮上升沿,每捕获到一个上升沿LED取反,上升沿由按键产生,目前硬件仿真发现,当我按下的时候,确实捕获到上升沿,但当我放开的时候却意外发现又捕获到一次,原因是捕获标志位再次挂起,但不是每次都会,差不多按4次,放开4次中有3次会。求解答,是否捕获原本就必须去抖?还是说我哪里设置错误,以下是我的程序
/*º¯ÊýÃû£ºtiM5_Init *ÃèÊö £ºTIM5³õʼ»¯ *²ÎÊý £ºÎÞ *·µ»Ø £ºÎÞ */ void TIM5_Init(void) { //¶¨Òå½á¹¹Ìå TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; NVIC_InitTypeDef NVIC_InitStruct; //¿ªÆô¶¨Ê±Ê±ÖÓ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); //72M£¨APB2£©Ò»·ÖƵ×÷ΪTIMʱÖÓ TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; //ÏòÉϼÆÊý TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //¼ÆÊý´ÎÊý TIM_TimeBaseInitStruct.TIM_Period = 0xffff; //TIM·ÖƵֵ TIM_TimeBaseInitStruct.TIM_Prescaler = 71; //Öظ´¼ÆÊýÆ÷ TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; //ÅäÖà TIM_TimeBaseInit(TIM5,&TIM_TimeBaseInitStruct); //ÖжÏʹÄÜ TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE); //2λÇÀÕ¼ÓÅÏȼ¶ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ͨµÀTIM1_UP_IRQHandlerÓÅÏȼ¶ÅäÖà NVIC_InitStruct.NVIC_IRQChannel = TIM5_IRQn; //ÓÅÏȼ¶Ê¹ÄÜ NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; //ÅäÖÃͨµÀÇÀÕ¼¼¶±ð NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //ÅäÖÃͨµÀÏìÓ¦¼¶±ð NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; //ÅäÖà NVIC_Init(&NVIC_InitStruct); //¶¨Ê±Æ÷ʹÄÜ TIM_Cmd(TIM5,ENABLE); } /*º¯ÊýÃû£ºTIM5_IC_Config *ÃèÊö £ºTIM5³õʼ»¯ *²ÎÊý £ºÎÞ *·µ»Ø £ºÎÞ */ void TIM5_IC_Config(void) { //¶¨Òå½á¹¹Ìå TIM_ICInitTypeDef TIM_ICInitStruct; GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 ; GPIO_Init(GPIOA,&GPIO_InitStruct); PAout(0) = 0; //Ñ¡ÔñͨµÀÒ» TIM_ICInitStruct.TIM_Channel = TIM_Channel_1; //6´ÎÂ˲¨ TIM_ICInitStruct.TIM_ICFilter = 0; //ÉÏÉýÑز¶»ñ TIM_ICInitStruct.TIM_ICPolarity = TIM_ICPolarity_Rising; //²»·ÖƵ TIM_ICInitStruct.TIM_ICPrescaler = TIM_ICPSC_DIV1; //Ó³Éäµ½TIÉÏ TIM_ICInitStruct.TIM_ICSelection = TIM_ICSelection_DirectTI; //²¶»ñ³õʼ»¯ TIM_ICInit(TIM5,&TIM_ICInitStruct); //ÖжÏʹÄÜ TIM_ITConfig(TIM5,TIM_IT_CC1,ENABLE); } void TIM5_IRQHandler(void) { if(TIM_GetITStatus(TIM5,TIM_IT_Update) == SET) { //Çå³ý±ê־λ TIM_ClearITPendingBit(TIM5,TIM_IT_Update); } if(TIM_GetITStatus(TIM5,TIM_IT_CC1) == SET) { PBout(5) = ~PBout(5); while(PAin(0)); TIM_ClearITPendingBit(TIM5,TIM_IT_CC1); } } 乱码都是注释,忽略不看即可。。。。 |
|
相关推荐
2个回答
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【米尔-国产瑞芯微RK3568开发板试用体验】评测一 系统配置
1338 浏览 0 评论
1484 浏览 0 评论
2674 浏览 1 评论
如何配置Linux操作系统设备树让我的开发板可以将板子上的GPIO接口用作 I2S输出??
2861 浏览 1 评论
1674 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-2 08:22 , Processed in 0.571881 second(s), Total 77, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191