更新时间:作者:小小条
软件内部的计时总是不准的
比如说我们想每0.01s执行一次某个操作,代码中是

{
//执行的操作
}
Delay(10)
实际上每个周期的时长应该是10ms+操作花费时长
如果这是个很复杂的操作,那影响就很大了。
想更精确的控制在10ms,那就需要定时器中断
Cube的设置
在cube中打开TIM1,使用内部时钟源
还是来看一下架构图
TIM1挂载在APB2上,在cube中我们也可以在时钟树看的它的频率
现在我们知道它是16MHz了,如果想让他每10ms触发一次,可以设置分频系数1600,然后计数周期100,有 16000000 / 1600 / 100 = 100Hz,即10ms(当然由于是从0开始计数,所以这里我们都要给它-1)
开启中断
程序的编写
写了这么多程序其实大家应该已经熟悉套路了,无非就是while前做一下初始化,打开中断,然后重写一下回调函数
我们依然是在while前打开中断
然后重写我们的回调函数,烧录就可以在串口助手上看到不断发来的“TIM interrupt”
可以把之前调用单通道ADC的程序拿过来,这就变成了通过定时器中断实现较为准确的100Hz采样了。当然我们也可以和之前的DMA读取结合起来等等,都可以。
当然实际中我们这样采用中断触发ADC是绕远了,STM32f10x系列单片机是支持内部ADC接受定时器中断的,可以更直接的使用定时中断使其采样。
版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除