1. CW32F003定时器时钟基础解析
CW32F003作为一款性价比极高的国产MCU,其定时器模块在嵌入式开发中扮演着重要角色。初次接触这款芯片时,我发现很多开发者对定时器时钟的理解存在误区,特别是分频系数与实际频率的关系容易混淆。
定时器的时钟源通常来自以下几个途径:
- 内部高速时钟(HSI)
- 外部高速时钟(HSE)
- PLL倍频后的时钟
以CW32F003为例,当使用内部8MHz HSI作为时钟源时,经过APB预分频器后,定时器的输入时钟频率可能发生变化。这里有个关键点:当APB分频系数不为1时,定时器时钟会进行倍频补偿。例如APB分频设为2时,定时器时钟反而会保持与系统时钟同频(8MHz),而不是简单的4MHz。
重要提示:在计算定时器参数前,务必通过RCC相关寄存器确认当前实际的定时器时钟频率,这是后续所有计算的基础。
2. 定时器工作模式深度剖析
2.1 基本定时器模式
这是最简单的定时模式,计数器从0累加到自动重装载值(ARR),然后产生更新事件。其定时周期计算公式为:
code复制T = (ARR + 1) * (PSC + 1) / Fclk
其中:
- ARR:自动重装载值(16位寄存器,最大值65535)
- PSC:预分频系数(16位寄存器,最大值65535)
- Fclk:定时器输入时钟频率
2.2 PWM模式配置要点
CW32F003的通用定时器支持PWM输出,配置时需要关注几个关键寄存器:
- TIMx_CR1:设置计数方向(向上/向下/中央对齐)
- TIMx_CCMRx:配置PWM模式1或模式2
- TIMx_CCER:设置输出极性
- TIMx_CCRx:决定PWM占空比
PWM频率计算公式:
code复制Fpwm = Fclk / [(ARR + 1) * (PSC + 1)]
占空比计算公式:
code复制Duty = CCRx / (ARR + 1)
2.3 输入捕获模式
用于测量脉冲宽度或频率,配置步骤:
- 设置输入捕获通道
- 配置触发边沿(上升沿/下降沿/双边沿)
- 使能捕获中断
- 在中断服务程序中读取捕获值
3. 实战:10ms延时函数实现
假设系统时钟为8MHz,我们需要实现精确的10ms延时。通过以下
