打印

STM8L 获取脉冲周期

[复制链接]
3814|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huo_shan|  楼主 | 2012-8-25 16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
跪求高手指教..................
STM8L  获取脉冲周期
我把PD1设置为上升沿中断端口,来响应脉冲信号的上升沿,用TIM3计数,然后在中断处理函数里记录定时器计数值,为什么脉冲频率怎么变计数值差都在16、17之间徘徊
//TIM3初始化:
void TIM3_Init()
{
  TIM3_DeInit();
  TIM3_CounterModeConfig(TIM3_CounterMode_Up);
  TIM3_TimeBaseInit(TIM3_Prescaler_16, TIM3_CounterMode_Up, 32767);
  TIM3_PrescalerConfig(TIM3_Prescaler_16,  TIM3_PSCReloadMode_Immediate);
  TIM3_ARRPreloadConfig(ENABLE);           //ENABLE or DISABLE
  //TIM3_ITConfig(TIM2_IT_Update,ENABLE);
  TIM3_Cmd(ENABLE);
}



void EXTI_Init()
{
  
  EXTI_DeInit();
  EXTI_SelectPort(EXTI_Port_D);
  //EXTI_SetPortSensitivity(EXTI_Port_D,EXTI_Trigger_Falling);
  EXTI_SetPinSensitivity(EXTI_Pin_1, EXTI_Trigger_Rising);
  ITC_SetSoftwarePriority(EXTI1_IRQn, ITC_PriorityLevel_1);     //设置中断优先级
  GPIO_ExternalPullUpConfig(GPIOD, GPIO_Pin_1, ENABLE);
  GPIO_Init(GPIOD, GPIO_Pin_1, GPIO_Mode_In_FL_IT);
}

//中断处理函数
INTERRUPT_HANDLER(EXTI1_IRQHandler,9)
{
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
  static int i = 0;
  //TIM3_Cmd(ENABLE);
  if(i!=10)
  {
    m[i] = TIM3_GetCounter();
    i++;
  }
  else
  {
    GPIO_Init(GPIOD, GPIO_Pin_1, GPIO_Mode_In_FL_No_IT);
    i = 0;
    TIM3_Cmd(DISABLE);
  }
}
沙发
NE5532| | 2012-8-26 11:48 | 只看该作者
童鞋,你发错版面了,就像跑到联通买移动滴号卡一样。

使用特权

评论回复
板凳
quxd| | 2012-8-26 12:04 | 只看该作者
路过此地,看一看。

使用特权

评论回复
地板
Ryanhsiung| | 2012-8-26 22:15 | 只看该作者
测量有误差是正常现象,差值差多少?    1%  10%,若太多则就不正常了

使用特权

评论回复
5
huo_shan|  楼主 | 2012-8-27 08:13 | 只看该作者
问题是不论输入频率怎么变,读到的值都一样.........

使用特权

评论回复
6
dwwzl302| | 2013-5-20 09:26 | 只看该作者
NE5532 发表于 2012-8-26 11:48
童鞋,你发错版面了,就像跑到联通买移动滴号卡一样。

呵呵,的确如此!看着有点蹩脚

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

19

帖子

0

粉丝