这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32NUCLEO-C542RC】:04定时器6调试过程

共1条 1/1 1 跳转至页

【STM32NUCLEO-C542RC】:04定时器6调试过程

高工
2026-10-15 15:22:50     打赏

1.1 文档目标

说出 TIM6 基本定时器的特性、内部工作流程和定时时间计算公式;

在 STM32CubeMX 中完成 TIM6 的时钟、参数与中断配置并生成工程;

在 VSCode 中编译、烧录,并编写 HAL 代码实现 TIM6 周期中断计数;

CubeMX 生成驱动与手写寄存器驱动的差异,以及工程使用中的关键注意点。

1.2 开发环境与前置条件

硬件:NUCLEO-C542RC 开发板(板载 ST-LINK,USB 供电并烧录)

主控:STM32C542RC:Cortex-M33 @ 144 MHz,256 KB Flash,64 KB RAM

配置工具:STM32CubeMX(6.x / 7.x,下称 CubeMX)

编译调试链:STM32CubeCLT(内含 arm-none-eabi-gcc、CMake、Ninja、OpenOCD 等)

编辑器:VSCode + C/C++ 插件(可选 ST 官方 STM32 VS Code Extension)固件库:STM32Cube FW_C5 固件包(含 HAL / LL 驱动,CubeMX 自动下载)

二、TIM6 基本定时器内容

2.1 STM32C542RC 的定时器资源

STM32C542RC 片内定时器资源如下表所示,TIM6 属于其中的基本定时器类别:

高级定时器:2 个(16 位);支持 PWM、互补输出、死区,常用于电机控制

通用定时器:1 个 32 位 + 2 个 16 位;支持输入捕获、输出比较、PWM、编码器接口

基本定时器:2 个(TIM6、TIM7,16 位);仅时基功能,无输入输出引脚,可触发 DAC

低功耗定时器:1 个(16 位);可在低功耗模式下运行

2.2 TIM6 的特性

TIM6 是 16 位基本定时器,与通用/高级定时器相比,它的功能最“精简”:

16 位向上计数器:计数范围 0 ~ 65535(0xFFFF),计满(等于自动重装载值)后清零并产生更新事件;

16 位预分频器(PSC):对内部时钟分频,取值 0 ~ 65535,实际分频系数为 PSC + 1;

自动重装载寄存器(ARR):决定计数上限,也决定更新周期;

仅支持内部时钟源:没有外部时钟引脚(无 ETR、无通道),只能由内部时钟驱动;

无输入捕获 / 输出比较通道:不能输出 PWM,也不能直接测量外部信号;

无外部引脚:计数结果只能通过寄存器(TIM6->CNT)读取,或通过中断 / DMA 输出更新事件;

可触发 DAC:更新事件可作为 DAC 的触发源(本系列可选功能);

时钟域:TIM6 挂接在 APB3 总线,具体频率由时钟树配置决定(详见下文计算)。

2.3 TIM6 工作原理(时基框图)

基本定时器实现“计数/定时”的核心链路如下,理解它就能理解后面所有配置参数:

时钟源:内部时钟(来自 APB3 定时器时钟)进入定时器;

预分频 PSC:对时钟分频,得到计数器 CNT 的计数脉冲频率,每个脉冲 CNT 加 1;计数器 CNT:向上计数,从 0 递增到 ARR;

自动重装载 ARR:CNT 计到 ARR 后产生更新事件(Update Event),CNT 清零重新开始;

中断 / 事件输出:更新事件可触发中断(NVIC)、DMA 请求或 DAC 触发。

整个链路可概括为:时钟 → PSC 分频 → CNT 计数 → 与 ARR 比较 → 更新事件 → 中断。


其中 f_tim 是 TIM6 实际得到的时钟频率。在 STM32C5 系列上,若 APB3 预分频系数为 1,则定时器时钟等于 APB3 时钟;若 APB3 分频系数不为 1,定时器时钟通常为 APB3 时钟的 2 倍,配置前务必在 Clock Configuration 页面核对。





关键词: NUCLEO-C542RC     定时器    

共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]