新手入门
- 积分
- 9
- 金钱
- 9
- 注册时间
- 2022-8-5
- 在线时间
- 5 小时
|
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
那一定是不满足判断语句啊,怎么能下降沿捕获啊
求大佬解释下,菜鸡没看懂
|
|