本帖最后由 Peixu 于 2023-11-20 18:12 编辑
#申请原创# @21小跑堂
在嵌入式系统开发中,时间管理是至关重要的。定时器在这方面扮演着关键角色,用于测量时间间隔、生成脉冲、控制任务执行周期等。
某些系列不具有32位计时器,自带的定时器均为16位。所以常常使用16位定时器来完成这些任务。然而,在某些情况下,当你需要进行某些同时需要精度与时长的计时内容时,16位计时器并不够用。
在这种情况下,将两个16位定时器级联成一个32位定时器就显得尤为重要。
目前使用的是一颗ARM Cortex-M0+内核的APM32F003是一款广泛应用于嵌入式系统中的低功耗、高性能的微控制器核心。
包含 2 个16bit高级控制定时器(TMR1 和 TMR1A)、1 个16bit通用定时器(TMR2)、1 个8bit基本型定时器(TMR4)、2 个看门狗定时器、1 个系统滴答定时器和 1 个自动唤醒定时器。
接下来将介绍如何使用APM32F003的两个16位定时器,将它们级联起来,实现一个功能强大的32位定时器。
1. 选择和初始化定时器一般微控制器通常具有多个定时器,我们需要选择两个可用的16位定时器并对它们进行初始化。这中间会涉及到设置时钟源、计数模式、中断使能等。请参考微控制器手册以获取特定寄存器的详细信息。 2. 配置级联模式在级联模式下,一个定时器被设置为主定时器(例如定时器2),另一个被设置为从定时器(例如定时器1)。主定时器的计数器溢出会触发一个中断,在该中断服务程序中,更新从定时器的计数器。 3. 中断服务程序设计设计主定时器的中断服务程序,以处理主定时器计数器溢出。在这个中断服务程序中,更新从定时器的计数器,可以是递增、清零或其他需求的操作。 4. 计算32位定时器的值在主程序中,可以在循环中读取定时器1和定时器2的值。通过位操作(如位移和逻辑或操作),将这两个16位计数器的值合并成一个32位的计时值。 |