stm8s103k3 周期 捕获_希望我这个对正在用STM8S做输入捕获,测频的有帮助!

第一部:

内部时钟   CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  //16M

第二步:

配置IO口 我用的是STM8S103k3t6

GPIO_Init(GPIOB , GPIO_PIN_0 , GPIO_MODE_IN_PU_NO_IT);//TIM1_CH1   PB0端口

第三步:TIM1初始化,

注意:

tim1 分频是16000000/1600 =10000

那计数一下的时间是!1/10000 S

向上计数 0到20000  的时间是2S

void TIME1_INIT(void)

{

TIM1_DeInit();

TIM1_TimeBaseInit(1600, TIM1_COUNTERMODE_UP, 20000, 0);

TIM1_ICInit( TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI , TIM1_ICPSC_DIV8, 0x0);

TIM1_ITConfig( TIM1_IT_CC1 , ENABLE);

TIM1_ClearFlag(TIM1_FLAG_CC1);

TIM1_Cmd(ENABLE);

}

第四步: TIM4用来产生溢出中断用的!

void TIME4_INIT(void)

{

TIM4_TimeBaseInit(TIM4_PRESCALER_32 ,250);

TIM4_ARRPreloadConfig(ENABLE);

TIM4_PrescalerConfig(TIM4_PRESCALER_32,TIM4_PSCRELOADMODE_IMMEDIATE);

TIM4_SetAutoreload(250);

TIM4_Cmd(ENABLE);

TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE);

}

第五步: TIM1的中断程序  连续进入两次中断,两次计数的值 乘 第三步中计数一下的时间 就是脉宽

//   if(TIM1_GetFlagStatus(TIM1_FLAG_CC1))

if(TIM1_GetITStatus(TIM1_FLAG_CC1) != RESET)

{

switch(temp)

{

case 0: ICValue1=TIM1_GetCapture1();

temp=1;

break;

case 1: ICValue2=TIM1_GetCapture1();

temp=2;

break;

default:

TIM1_CCxCmd(TIM1_CHANNEL_1, DISABLE);

TIM1_ITConfig(TIM1_IT_CC1, DISABLE);

temp=3;

break;

}

TIM1_ClearITPendingBit(TIM1_IT_CC1);

TIM1_ClearFlag(TIM1_FLAG_CC1);

}

第六步:

TIM4的中断程序

if(temp==3)

{

temp=0;

if(ICValue2>ICValue1)

{

disvalue=ICValue2-ICValue1;

}

else if(ICValue2

{

//disvalue=0xffff+ICValue2-ICValue1;

disvalue=20000+ICValue2-ICValue1;  //防止计数到末端的时候 重新计数

}

val[i0++] = disvalue;

if(i0>10) i0=0;

display();

TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE);

TIM1_ITConfig(TIM1_IT_CC1, ENABLE);

}

else

{

display();

}

TIM4_ClearITPendingBit(TIM4_IT_UPDATE);

我现在又个问题!我硬件上   PB0 TIM1的捕获口不接任何东西的情况下

TIM1_ICPSC_DIV8 时 得到的  disvalue 值是40

TIM1_ICPSC_DIV1   得到的  disvalue   的值是 5

好像精确的不得了  时间那就是 两脉宽时间差是   5/10000S   =  2000HZ 这个到底是什么值  输入口不接任何东西也能进去 捕获中断!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值