STM32定时器 输入捕获实现双边沿检测
2015-07-17 15:57
288 查看
STM32的定时器有输入捕获功能,在STM32F10x_tim.h中对于TIM_Input_Capture_Polarity有如下定义
可以 可以出具有BothEdge也就是双边沿检测,但是实际上并没有
如下图所示
执行的是没有双边沿的,因此我们要手工实现双边沿,如下见技术手册
也就是在中断中我们可以选择检测本次中断是上升沿中断还是下降沿中断,如果是上升沿中断,就修改为下降沿中断,反之就修改为上升沿中断。
既可以实现上升沿和下降沿
#define TIM_ICPolarity_Rising ((uint16_t)0x0000) #define TIM_ICPolarity_Falling ((uint16_t)0x0002) #define TIM_ICPolarity_BothEdge ((uint16_t)0x000A) #define IS_TIM_IC_POLARITY(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \ ((POLARITY) == TIM_ICPolarity_Falling)) #define IS_TIM_IC_POLARITY_LITE(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \ ((POLARITY) == TIM_ICPolarity_Falling)|| \ ((POLARITY) == TIM_ICPolarity_BothEdge))
可以 可以出具有BothEdge也就是双边沿检测,但是实际上并没有
如下图所示
执行的是没有双边沿的,因此我们要手工实现双边沿,如下见技术手册
也就是在中断中我们可以选择检测本次中断是上升沿中断还是下降沿中断,如果是上升沿中断,就修改为下降沿中断,反之就修改为上升沿中断。
void TIM1_CC_IRQHandler(void)// 用相应的定时器中断 { u8 i; if (TIM_GetITStatus(TIM1, TIM_IT_CC1) != RESET)//是TIM1CH2 { TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);//清空捕获标志 if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8))//如果当前是高电平,那么下降沿,反之设置上升沿~!!!灵感! TIM1->CCER|=(1<<1); else TIM1->CCER&=~(1<<1); }}
既可以实现上升沿和下降沿
相关文章推荐
- Makefile学习
- 收藏网站4
- 修改Android签名证书keystore的密码、别名alias以及别名密码
- Mac上运行php文件
- Jquery调用iframe页面方法、获取节点操作
- CentOS 6.5部署安装Memcached
- BCP command usage in SQL Server
- linux系统调用如何实现write
- 牛腩新闻发布系统后台开发总结
- OC 中NULL nil和NSNULL的区别
- 南阳OJ语言入门锦集
- SQL Server 2000初识—管理工具与设计基础
- 适应各种终端设备的自适应网页设计
- squid 2.7 配置与安装
- 数据的建立
- iOS中id与NSObject* 和id<NSObject>的区别
- programming-challenges110201 jolly jumpers
- UVALive 5908 Tracking RFIDs 【计算几何】
- 收藏网站3
- 手机登录