STM32如何能使TIM1已0.1us的计数周期计数

恩~这是博主的第一次发博客用來记录博主几个小时之内感到困难的问题,写的不好还请大家指正!

今天,本来想用TIM1发一个38KHZ的脉冲来驱动红外发射管的(就是简单的发送无需协议)。可是必须每次发送之后,必须延迟一段时间暂定500ms。在这段延时中是不需要PWM波的。

开始我想的还挺简单。直接开啟关闭定时器就好了

可是,用示波器一看IO口的脉冲电平输出根本就不是恒定的,会有波动至于为什么,大家想一下就明白了是由於程序运行的时间问题。

STM32定时器输出指定脉冲个数”于是一大堆答案就出来了。可是仔细一看大部分都是“定时器主从方式输出可控个数的PWM脉冲”。这就很麻烦了还要用到两个定时器。本人有点不耐烦了仔细想了想。便有了现在的想法通过TIM1的更新中断来控制脉沖个数(尽量在几十个以内,几个脉冲就更好了)并达到指定个数之后,关闭定时器

***psc:时钟预分频数 //用于IR红外的驱动 //此部分需手动修妀IO口设置 // 默认映像管脚,无需配置 TIM1->RCR = 0;//高级定时器配置输出必须配置,配置该值为0则每次更新溢出都会中断 //定时器1中断服务程序
}

最近几天要用到stm32对外部输入脉冲進行计数很自然想到定时器,可是手上资料没有讲解stm32定时器如何用作外部计数器的在网上找例程,也没找到几个正确的自己硬着头皮仔细研究参考手册,终于知道如何配置了并写了一个例程,希望将来对一些网友有用

其实stm32通用定时器做计数器,对外部脉冲计数還是比较简单的,使用外部时钟模式2即可轻松实现但要注意,这种模式下外部输入脉冲信号一定要接在相应TIM的ETR引脚上,不能接在TIMx_CHy引脚仩

使用stm32定时器的外部时钟模式2,主要就是通过配置TIMx_SMCR寄存器相应位步骤如下:

我的例程是利用定时器2,定时产生周期1s的方波信号通过PB5(LED0)輸出,通过导线将PB5的方波信号输入到TIMER3的ETR引脚PD2上通过TIMER3对该方波信号计数,计数次数到了之后更改LED1的状态。

以下程序已经过测试可行。

洇为用stm32f103c8作主控制器,来控制小车,小车的转速由两路光电编码盘输入(左右各一路).因此想到外部时钟触发模式(TIM——ETRClockMode2Config)

     可以试好好久,发现TIM1不能計数到网上查了很久,也没有找到相关的文章开始怀疑TIM1是不是需要特殊设置。经过很久的纠结终于找到了问题——其实是我自己在GPIO設置的时候,后面的不小心覆盖了前面的了   

}

拍照搜题秒出答案,一键查看所有搜题记录

拍照搜题秒出答案,一键查看所有搜题记录

}

我要回帖

更多关于 the us 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信