你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm8l外部中断计数出错

[复制链接]
灬玄★冰灬 提问时间:2017-9-2 16:20 /
设置双沿触发中断,进入中断后获取定时器计数,并清零计数器。但是获得的计数值和我的实际信号宽度不一致。请大家帮我看一下程序,谢谢

void TIM2_Init()
{
  TIM2_CR1_bit.CEN = 0;     //stop tim1
  TIM2_PSCR = TIM2_Prescaler_16;        ////设置预分频数值为16,定时器时钟= 1MHz

  TIM2_ARRH = 0xf1;         
  TIM2_ARRL = 0xf4;
  TIM2_CR1_bit.CMS = 0;     //
  TIM2_CR1_bit.DIR = 0;     //设置定时器1的计数方式为向上计数
  TIM2_CNTRH =0x00;         //清除计数器
  TIM2_CNTRL =0x00;         //
  TIM2_IER_bit.UIE = 1;          //使能更新中断
  TIM2_CR1_bit. ARPE = 1;        //设置允许自动更新
  TIM2_CR1_bit. CEN = 1;         //使能定时器1开始计数
}

#pragma vector = EXTI2_vector           //PD端口中断向量号
__interrupt void GPIOB_IRQHandler(void)
{
  PB_ODR  ^= 0x01 ;
  EXTI_ClearITPendingBit(EXTI_IT_Pin2);

   if(ID_Finish_Flag!=1)
        {

    TIM_CNT_16 =TIM2_GetCounter();

    TIM_CNT_16_buf[i]=TIM_CNT_16;
    i++;
    if(i==64)
      i=0;
  }

PB0端口输出宽度与输入信号一致,但是计数器值不正常。信号宽度为500us左右。看图,请大家帮忙找下原因,谢谢
test1.png
收藏 评论2 发布时间:2017-9-2 16:20

举报

2个回答
灬玄★冰灬 回答时间:2017-9-2 16:21:48
TIM2_GetCounter();内部已经对计数器清零。
灬玄★冰灬 回答时间:2017-9-2 17:36:31
自己找到了原因!通过分析计数值得出TIM2预分频值发生了变化  本来16分频变成了1分频,把初始化时直接改成了不分频。但是不明白什么原因造成了预分频值的变化,难道是计数器手动清零 ?如果有高手知道麻烦为我解答。谢谢

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2 结贴奖励

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版