第六章第二节 定时器定时中断 & 定时器外部时钟

1. STM32 定时器定时中断(内部时钟模式)的配置流程

RCC 开启时钟
  • 做什么:打开定时器外设和系统时钟的 "总开关"。
  • 为什么:STM32 的外设默认时钟关闭(省电),必须手动开启才能工作。
选择时基单元的时钟源(内部时钟模式)
  • 做什么:指定定时器用 "内部时钟"(CK_INT,来自系统时钟分频)。
  • 为什么:定时器有多种时钟源(内部 / 外部触发 / 其他定时器),定时功能默认用内部时钟。
配置时基单元
  • 做什么 :设置 预分频器(PSC)自动重装值(ARR),决定 "定时周期"。
  • 为什么
    • PSC 分频输入时钟(CK_CNT = CK_PSC / (PSC + 1));
    • ARR 决定计数上限(从 0 数到 ARR 触发溢出);
    • 最终定时时间 = (ARR + 1) * (PSC + 1) / CK_INT
配置输出中断控制,允许更新中断
  • 做什么:让定时器溢出时触发 "更新中断"(UEV 生成 UIF 标志)。
  • 为什么:定时器溢出是 "定时完成" 的标志,需要通知 CPU 处理事件。
⑤ 配置 NVIC,打开中断通道并分配优先级
  • 做什么:让 CPU 响应定时器的中断请求,设置中断优先级。
  • 为什么 :STM32 有 嵌套向量中断控制器(NVIC),需配置才能让中断被 CPU 处理。

2. 函数分类 & 核心逻辑

① 初始化 & 复位

**(1)**恢复定时器默认配置(寄存器归 0)

cs 复制代码
TIM_DeInit(TIM_TypeDef* TIMx)

(2) 配置时基单元(PSC、ARR、计数模式等核心参数)

cs 复制代码
TIM_TimeBaseInit( ... )

(3) 给时基结构体赋默认值

cs 复制代码
TIM_TimeBaseStrcutInit( ... )

② 时钟 & 模式配置

(1) 选择内部时钟模式(定时器用 CK_INT 作为时钟源)

cs 复制代码
TIM_InternalClockConfig(...)

(2) 选择外部触发输入作为时钟

cs 复制代码
TIM_ITRxExternalClockConfig(...)

(3) 选择**TIx 引脚外部时钟,需配置极性、滤波器,**适合编码器、外部脉冲计数

cs 复制代码
TIM_TIxExternalClockConfig(...)

③ 使能 & 控制

(1) 启动 / 停止计数器(NewState=ENABLE / DISABLE)

cs 复制代码
TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState)

(2) 使能 / 禁用定时器中断

cs 复制代码
TIM_ITConfig(...)

3. Timer.c 模块

① 选择时钟源

cs 复制代码
TIM_InternalClockConfig(TIM2);
  • 作用 :指定 TIM2 使用 内部时钟(由芯片内部总线提供,最常用的默认方式 )。

② 时基配置

cs 复制代码
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
// 不分频,时钟直接传递
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;  
// 向上计数(从 0 数到 ARR,再重装载)
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; 
// 自动重装载值(计数器溢出值)
TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;  
// 预分频器(把总线时钟分频,降低计数频率)
TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;  
// 高级定时器用,普通定时器设 0
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; 
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);

4. 定时器外部时钟

① 定时器外部触发配置(可选,非必需理解)

cs 复制代码
// 配置 TIM2 外部触发模式:关闭预分频、非反相极性等,复杂场景(如外部脉冲触发计数)会用到,简单定时可忽略细节
TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0x0F); 
相关推荐
单片机仿真设计8 小时前
【Proteus 仿真】基于 STM32 单片机智能楼宇照明控制系统设计(定制仿真咨询)
stm32·单片机·嵌入式硬件·proteus·毕设
ACP广源盛139246256738 小时前
M6/M5 Pro Mac mini 端侧 AI 爆发@ACP#YLB3118 存储扩展芯片在本地 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
HUI-4749 小时前
EG1198|ESOP‑8 高性价比内置 MOS 降压 DC‑DC,10‑120V 小功率车载仪表优选
嵌入式硬件·硬件工程
智购科技自动贩卖机19 小时前
自动售货机嵌入式状态机设计实战:从45个事件源到层次型状态机的工程重构
大数据·人工智能·stm32·物联网·重构·硬件架构
长江后浪博客20 小时前
ESP32-SOLO-1 在 ESP-IDF v5.5 下启动不断重启问题分析与解决
单片机·嵌入式硬件·嵌入式·esp32·freertos·esp-idf
单片机仿真设计21 小时前
【proteus仿真】基于 STM32 单片机智能仓库设计(仿真图+程序)
stm32·单片机·嵌入式硬件·proteus·毕设
星游路21 小时前
单片机·电子时钟
单片机·嵌入式硬件
AOI小白新手上路1 天前
江科协51单片机 7-2 LCD1602显示时钟实验
单片机·嵌入式硬件·51单片机
思麟呀1 天前
嵌入式入门(一)宏观生态到首次烧录
c语言·嵌入式硬件
runningshark1 天前
SC32L14GR8PJR
单片机·嵌入式硬件