OpenEdv-开源电子网

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

针对38k载波的红外解码,不需要考虑协议,暂时完成数据获取,数据压缩还没做

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2014-2-19
在线时间
0 小时
发表于 2014-3-19 14:10:07 | 显示全部楼层 |阅读模式
#include "capture.h"
extern u16 cap_value[cap_len];//用来保存捕获的计数值
extern u8 cap_num; //进入捕获次
extern u8 capture_end_flag;
void ir_capture_config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  NVIC_InitTypeDef NVIC_InitStructure;
TIM_ICInitTypeDef  TIM2_ICInitStructure;
  //开启定时器2时钟和GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 
//PA.0作为输入捕获通道,上拉输入
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
GPIO_Init(GPIOA, &GPIO_InitStructure);  
//计数周期为arr*1us,20ms后会溢出,一般不会溢出
//溢出一般发生在一个红外信号结束后在捕获到上升沿后一直没有捕获到下降沿,而且这个时间一般比20ms大,所以溢出可以用来表示一个红外信号结束
TIM_TimeBaseStructure.TIM_Period = arr;  
TIM_TimeBaseStructure.TIM_Prescaler =psc;  
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; 
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 
  
   //定时器2捕获通道1,初始化为下降沿捕获,因为红外接收头在没有信号的时候输出为高
TIM2_ICInitStructure.TIM_Channel = TIM_Channel_1; 
  TIM2_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
  TIM2_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; 
  TIM2_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  TIM2_ICInitStructure.TIM_ICFilter = 0x3;
  TIM_ICInit(TIM2, &TIM2_ICInitStructure);
//设置捕获的优先级最高
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure); 
//这边要设置2种中断模式
CAP_INT_EN(0);
//暂时关闭定时器,要使用时在开启
  CAP_EN(0);
}
//定时器2中断处理函数
void TIM2_IRQHandler(void)

  u16 TIM2CH1_CAPTURE_VAL=0;
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
if(cap_num!=0)//
{
CAP_INT_EN(0);//结束此次捕获
        CAP_EN(0);
cap_value[cap_num-1]=cap_value[cap_num-2]; //暂时将最后一个脉冲补充成一组信号,即复制它前一个数据
TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling);
capture_end_flag=1;
}
}
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET)
{
if(cap_num==0)
{
TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising);
}
else
{
TIM2CH1_CAPTURE_VAL=TIM_GetCapture1(TIM2);
cap_value[cap_num-1]=TIM2CH1_CAPTURE_VAL;
if(cap_num&0x01)
{
TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Falling); 
}
else
{
TIM_OC1PolarityConfig(TIM2,TIM_ICPolarity_Rising); 
}
}
TIM_SetCounter(TIM2,0);
cap_num++;
}           
  TIM_ClearITPendingBit(TIM2, TIM_IT_CC1|TIM_IT_Update);
}

参加过电子设计大赛,玩过单片机,搞过DSP,fpga也接触过,可惜学的不精,在此就是来好好研究的,请多多关照
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2014-3-19 14:37:15 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-19 17:38:53 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-13 16:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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