OpenEdv-开源电子网

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

输入捕获实验,我把TIM5改成TIM2的通道二结果就不对捕获出来的就是65536

[复制链接]

9

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2014-4-1
在线时间
0 小时
发表于 2014-5-14 19:08:37 | 显示全部楼层 |阅读模式
5金钱
我只把TIM5改成了TIM2的通道2 ,求大神指导!感激不尽!
void TIM2_Cap_Init(u16 arr, u16 psc)
{
    RCC->APB1ENR|=1<<0;     //开启TIM2时钟     
    RCC->APB2ENR|=1<<2;     //使能PORTA时钟
    
    GPIOA->CRL&=0XFFFFFF0F;
    GPIOA->CRL|=0X00000080; //配置PA1为输入
    GPIOA->ODR|=0<<1;       //配置PA1为下拉
    
    TIM2->ARR=arr;          //设置重装载值
    TIM2->SC=psc;          //设置预分频器
    
    TIM2->CCMR1|=1<<8;      //CC2S=01  选择输入端ic2映射到TI1上
    TIM2->CCMR1|=0<<12;     //IC1F=0000 配置输入滤波器 不滤波
    TIM2->CCMR1|=0<<10;      //IC2PS=00 不预分频
    
    TIM2->CCER|=1<<5;       //上升沿捕获;
    TIM2->CCER|=1<<4;       //允许捕获;
    
    TIM2->DIER|=1<<2;       //允许捕获中断
    TIM2->DIER|=1<<0;       //允许更新中断
    TIM2->CR1|=0X01;        //使能计数器允许计数
    MY_NVIC_Init(1,0,TIM2_IRQChannel,2);//抢庄优先级2,子优先级0,组2
}

void TIM2_IRQHandler(void)
{    
u16 tsr;
tsr=TIM2->SR;
  if((TIM5CH1_CAPTURE_STA&0X80)==0)//还未成功捕获
{
if(tsr&0X01)//溢出
{    
if(TIM5CH1_CAPTURE_STA&0X40)//已经捕获到高电平了
{
if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
{
TIM5CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
TIM5CH1_CAPTURE_VAL=0XFFFF;
}else TIM5CH1_CAPTURE_STA++;
}
 
}
if(tsr&0x02)//捕获1发生捕获事件
{
if(TIM5CH1_CAPTURE_STA&0X40) //捕获到一个下降沿
{  
TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽
   TIM5CH1_CAPTURE_VAL=TIM2->CCR1; //获取当前的捕获值.
TIM2->CCER&=~(1<<1); //CC1P=0 设置为上升沿捕获
}else   //还未开始,第一次捕获上升沿
{
TIM5CH1_CAPTURE_STA=0; //清空
TIM5CH1_CAPTURE_VAL=0;
TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿
TIM2->CNT=0; //计数器清空
TIM2->CCER|=1<<1; //CC1P=1 设置为下降沿捕获
}    
}           
  }
TIM2->SR=0;//清除中断标志位    
}

int main()
{
u32 temp=0;
Stm32_Clock_Init(9);
uart_init(72,9600);
//delay_init(72);
PWM_Init(999,71);
//TIM2_init(0xffff,71);
TIM2_Cap_Init(999, 71);


while(1)
{
 TIM3->CCR2=600;//tim3比较寄存器的值
if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
{
temp=TIM5CH1_CAPTURE_STA&0X3F;
temp*=65536; //溢出时间总和
temp+=TIM5CH1_CAPTURE_VAL; //得到总的高电平时间
printf("HIGH:%d us\r\n",temp); //打印总的高点平时间
TIM5CH1_CAPTURE_STA=0; //开启下一次捕获
}

}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165537
金钱
165537
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-14 23:46:13 | 显示全部楼层
看似没问题,仿真看看吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

5

主题

25

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2016-6-29
在线时间
17 小时
发表于 2016-11-14 11:42:34 | 显示全部楼层
你这个timer2输入捕获功能实现了没有啊,能分享下吗,我也遇到同样的问题。
回复

使用道具 举报

5

主题

10

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2017-10-6
在线时间
8 小时
发表于 2017-10-6 11:34:18 | 显示全部楼层
我也遇到了这个问题,请问你是如何解决的,还有一点不是很明白就是为什么你的TIM2捕获程序里有那么多关于TIM5的配置?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-13 20:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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