dyc1229 发表于 2022-6-29 21:41

[N32L43X评测]4.Timer&MultiTimer 硬件定时器与软件定时器

<p>N32的定时器资源十分丰富</p>

<p>其中高级定时器定时器2个(TIM1,TIM8),具备PWM互补输出</p>

<p>5个普通定时器(TIM2,TIM3,TIM4,TIM5,TIM9)</p>

<p>2个基本定时器(TIM6,TIM7)</p>

<p>还有低功耗定时器和2个看门狗定时器,还有个基本的Systick</p>

<p> &nbsp;</p>

<p lang="en-US">&nbsp;</p>

<p>Systick让我用做Delay应用了,那就选个普通定时器作为系统时基定时器吧</p>

<p>首先要了解TIM的时钟总线属于APB1,默认情况下是主频的1/4,即主频设置为108MHz时,APB总线为27MHz。为了以后使用USB功能,所以将主频设置成了96MHz</p>

<p>如果使用高级定时器(TIM1,TIM8)时,要注意APB2时钟是主频的1/2。</p>

<p>&nbsp;</p>

<p lang="en-US">&nbsp;</p>

<p lang="en-US">&nbsp;</p>

<p> &nbsp;</p>

<p lang="en-US">&nbsp;</p>

<p>时钟频率确定了,那么就可以根据这个配置分频了</p>

<p>96MHz的1/4 是24MHz,分频24倍正好1MHz</p>

<p>然后装载值设置为1000的话就是1mS了</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p></p>

<p>这样一个普通定时器功能就完成了</p>

<p>&nbsp;</p>

<p>通常硬件定时器配置调用什么的稍显复杂,偶尔看见开源的MultiTimer,遂见猎心喜</p>

<p>测试了一下确实很方便,移植起来也非常简单</p>

<p><a href="https://github.com/0x1abin/MultiTimer">https://github.com/0x1abin/MultiTimer</a></p>

<p>现在有2个版本,一个development版的比较适合Linux系统,一个Master版本比较适合单片机</p>

<p>这里提供两个版本的移植,喜欢哪个用哪个吧</p>

<p>先说一下development的使用方式</p>

<p>1.通过时基定时器中断不断++系统定时变量</p>

<p>2.写一个返回系统定时器的函数</p>

<p>3.配置好需要的定时器</p>

<p>4.循环执行MultiTimerYield();</p>

<p> &nbsp;</p>

<p>当然2个版本的功能是一样的</p>

<p> &nbsp;</p>

<p lang="en-US">&nbsp;</p>

<p> &nbsp;</p>

<p>&nbsp;</p>

<p></p>

<p>这样用1个硬件定时器就可以扩展N个定时器,而且调用方式也很简单,非常适合资源有限的单片机</p>

<p>另外此作者还有一个按键的驱动MultiButton</p>

<p><a href="https://github.com/0x1abin/MultiButton">https://github.com/0x1abin/MultiButton</a></p>

<p>,也非常好用,可以识别按下弹起,双击长按等功能,如果感兴趣的话我找时间也移植到N32上面</p>

<p>&nbsp;</p>
页: [1]
查看完整版本: [N32L43X评测]4.Timer&MultiTimer 硬件定时器与软件定时器