OpenEdv-开源电子网

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

关于红外遥控实验里定时器输入捕获中断回调函数的RmtSta的问题

[复制链接]

4

主题

6

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2022-8-5
在线时间
5 小时
发表于 2022-8-20 13:26:03 | 显示全部楼层 |阅读模式
6金钱
//定时器输入捕获中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//捕获中断发生时执行
{
if(htim->Instance==TIM3)
{
if(RDATA)//上升沿捕获
{
TIM_RESET_CAPTUREPOLARITY(&TIM3_Handler,TIM_CHANNEL_3);
// 一 定 要 先 清 除 原 来 的 设
置!!
TIM_SET_CAPTUREPOLARITY(&TIM3_Handler,TIM_CHANNEL_3,
TIM_ICPOLARITY_FALLING);//CC1P=1 设置为下降沿捕获
__HAL_TIM_SET_COUNTER(&TIM3_Handler,0); //清空定时器值
RmtSta|=0X10;
//标记上升沿已经被捕获
}else //下降沿捕获
{
Dval=HAL_TIM_ReadCapturedValue(&TIM3_Handler,
TIM_CHANNEL_3);//读取 CCR2 也可以清 CC2IF 标志位
TIM_RESET_CAPTUREPOLARITY(&TIM3_Handler,TIM_CHANNEL_3);
//一定要先清除原来的设置!!
TIM_SET_CAPTUREPOLARITY(&TIM3_Handler,TIM_CHANNEL_3,
TIM_ICPOLARITY_RISING);//配置 TIM3 通道 3 上升沿捕获
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;
//清空计时器
}
这个地方他在判断完是不是已经捕获上升沿后,RmtSta必然是0x10啊,他也没有重新赋值的语句啊,怎么会RmtSta&0X80
那一定是不满足判断语句啊,怎么能下降沿捕获啊
求大佬解释下,菜鸡没看懂

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-8-24 00:23:36 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 06:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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