完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
void tiM2_IRQHandler(void)
{ if((TIM2CH1_CAPTURE_STA&0X80)==0)//还未成功捕获 { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { if(TIM2CH1_CAPTURE_STA&0X40)//已经捕获到高电平了 { if((TIM2CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了 { TIM2CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次 TIM2CH1_CAPTURE_VAL=0XFFFF; }else TIM2CH1_CAPTURE_STA++; } } if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)//捕获1发生捕获事件 { if(TIM2CH1_CAPTURE_STA&0X40) //捕获到一个下降沿 { TIM2CH1_CAPTURE_STA=TIM2CH1_CAPTURE_STA&0Xbf; num_rise++; HVAL=TIM_GetCapture1(TIM2); HTIME=TIM2CH1_CAPTURE_STA&0X3f; TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising); //CC1P=0 设置为上升沿捕获 }else //还未开始,第一次捕获上升沿 { if(num_rise==0){ TIM2CH1_CAPTURE_STA=0; //清空 TIM2CH1_CAPTURE_VAL=0; TIM_SetCounter(TIM2,0); TIM2CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿 TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling); //CC1P=1 设置为下降沿捕获 } if(num_rise==1) { num_rise=0;//为下次测量做准备 TIM2CH1_CAPTURE_STA|=0X80;//周期捕获成功 TIM2CH1_CAPTURE_VAL=TIM_GetCapture1(TIM2); } } } } TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位 } 这是中断服务函数,在这边我捕获一个上升沿和一个下降沿来捕获高电平时间,然后再捕获一个上升沿来捕获周期时间,但是我这样好像只能同时测一个范围内的频率和占空比。。。。求解答!!! |
|
相关推荐
13个回答
|
|
定时器的时钟可以实时调节,这样就可以扩大测量范围了
|
|
|
|
这个很简单的
|
|
|
|
但是我又个疑问,现象是这样的:我测1KHZ以下的频率周期测得准,但是占空比测不准,不知道是什么原因,然后把分频数改到36735才可以测得到2HZ的占空比。这个是什么原因呢??? |
|
|
|
|
|
|
|
你用的芯片型号是什么啊?
|
|
|
|
|
|
|
|
w513808 发表于 2018-10-3 16:06 是不是存储占空比变量的那个格式不正确 |
|
|
|
应该不是,频率大一些的时候占空比测又得准了,小了反而测不准。前提是频率都测得准(也就是周期测得准)。。。 |
|
|
|
那就不清楚了 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
对,是我当时疏忽没注意到。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
812 浏览 0 评论
使用stm32l451片子,对ad7606进行3通道100k采样值跳动问题?
1357 浏览 1 评论
STM32进行DMA数据转运,为什么只有A组最后一位数据被转运到B组去?
1807 浏览 2 评论
2102 浏览 3 评论
1692 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-2 08:17 , Processed in 0.658459 second(s), Total 66, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191