OpenEdv-开源电子网

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

采用输入捕获模式红外遥控的问题

[复制链接]

36

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2015-3-29
在线时间
3 小时
发表于 2015-4-20 18:25:35 | 显示全部楼层 |阅读模式
5金钱
1:在中断处理函数中,标记已经完成一次按键的键值信息采集为什么在溢出部分进行赋值?按道理说应该在32位数据发送完后的按键键值增加的判断里进行赋值,来表示一次按键的键值信息采集啊!
2:if((RmtSta&0X0F)<14)RmtSta++;是为了延时还是什么?溢出部分的判断处理得功用是什么呢?
[mw_shl_code=c,true]//遥控器接收状态 RmtSta //[7]:收到了引导码标志 //[6]:得到了一个按键的所有信息 //[5]:保留 //[4]:标记上升沿是否已经被捕获 //[3:0]:溢出计时器 u8 RmtSta=0; u16 Dval; //下降沿时计数器的值 u32 RmtRec=0; //红外接收到的数据 u8 RmtCnt=0; //按键按下的次数 //定时器5中断服务程序 void TIM5_IRQHandler(void) { u16 tsr; tsr=TIM5->SR; if(tsr&0X01)//溢出 { if(RmtSta&0x80)//上次有数据被接收到了 { RmtSta&=~0X10; //取消上升沿已经被捕获标记 if((RmtSta&0X0F)==0X00)RmtSta|=1<<6;//标记已经完成一次按键的键值信息采集 if((RmtSta&0X0F)<14)RmtSta++; else { RmtSta&=~(1<<7);//清空引导标识 RmtSta&=0XF0; //清空计数器 } } } if(tsr&(1<<2))//CC2IE中断 { if(RDATA)//上升沿捕获 { TIM5->CCER|=1<<5; //CC2P=1 设置为下降沿捕获 TIM5->CNT=0; //清空定时器值 RmtSta|=0X10; //标记上升沿已经被捕获 }else //下降沿捕获 { Dval=TIM5->CCR2; //读取CCR1也可以清CC2IF标志位 TIM5->CCER&=~(1<<5); //CC2P=0 设置为上升沿捕获 if(RmtSta&0X10) //完成一次高电平捕获 { if(RmtSta&0X80)//接收到了引导码 { if(Dval>300&&Dval<800) //560为标准值,560us { RmtRec<<=1; //左移一位. RmtRec|=0; //接收到0 }else if(Dval>1400&&Dval<1800) //1680为标准值,1680us { RmtRec<<=1; //左移一位. RmtRec|=1; //接收到1 }else if(Dval>2200&&Dval<2600) //得到按键键值增加的信息 2500为标准值2.5ms { RmtCnt++; //按键次数增加1次 RmtSta&=0XF0; //清空计时器 } }else if(Dval>4200&&Dval<4700) //4500为标准值4.5ms { RmtSta|=1<<7; //标记成功接收到了引导码 RmtCnt=0; //清除按键次数计数器 } } RmtSta&=~(1<<4); } } TIM5->SR=0;//清除中断标志位 } [/mw_shl_code]

最佳答案

查看完整内容[请看2#楼]

1,因为如果还没采集完,那是绝对不会溢出的。 2,为了统计连按
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-20 18:25:36 | 显示全部楼层
1,因为如果还没采集完,那是绝对不会溢出的。
2,为了统计连按
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2015-3-29
在线时间
3 小时
 楼主| 发表于 2015-4-21 09:47:28 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
1:比如按着某一个键不放,就会不断执行54到58行对不?而且每次上升沿将CNT清零,再下降沿得到CCR2的值,所以会不会溢出的啊!
2:连按不是在56行进行统计的吗?
3:为什么26行注释写-清空计数器-而57行写-清空计时器?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-23 07:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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