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

stm8l外部中断计数出错

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

评分

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

查看全部评分

所属标签

相似问题

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