企业网站建设要天津做网站都找津坤科技
2026/6/9 23:42:45 网站建设 项目流程
企业网站建设要,天津做网站都找津坤科技,玄武网站建设,用家里网络做网站TIM#xff08;Timer#xff09;定时器定时器可以对输入的时钟进行计数#xff0c;并在计数值达到设定值时触发中断16 位计数器、预分频器、自动重装寄存器的时基单元#xff0c;在 72MHz 计数时钟下可以实现最大 59.65s 的定时#xff08;还可以级联获得更大的时间#…TIMTimer定时器定时器可以对输入的时钟进行计数并在计数值达到设定值时触发中断16 位计数器、预分频器、自动重装寄存器的时基单元在 72MHz 计数时钟下可以实现最大 59.65s 的定时还可以级联获得更大的时间不仅具备基本的定时中断功能而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能根据复杂度和应用场景分为了高级定时器、通用定时器、基本定时器三种类型1. 核心功能定时器是单片机的 “计时 / 计数工具”计时基于内部时钟如 72MHz通过 “预分频器降低时钟频率 计数器累计脉冲 自动重装寄存器设定目标值” 的组合实现精准定时比如定时 1ms 触发一次中断。假如我对72MHz记了72个数72MHz代表一秒钟有72 000 000个技术脉冲那么就意味着一个技术脉冲的时间是 1/72 000 000但是我们给的技术脉冲是72个所以这个计时器就会1/72 000 000 *720.000 001 也就是1微妙的时间就可以得到了1微妙的时间间隔。那如果是72000 那就可以得到1毫秒的时间间隔计数也可以对外部输入的脉冲信号比如传感器的脉冲进行计数达到设定值时触发动作2. 类型区别类型编号总线功能高级定时器TIM1、TIM8APB2拥有通用定时器全部功能并额外具有重复计数器、死区生成、互补输出、刹车输入等功能通用定时器TIM2、TIM3、TIM4、TIM5APB1拥有基本定时器全部功能并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能基本定时器TIM6、TIM7APB1拥有定时中断、主模式触发 DAC 的功能总线APB1/APB2的区别APB 是单片机的外设总线APB2频率通常更高比如 STM32 中 APB2 最大频率 72MHzAPB1 最大 36MHz所以高级定时器TIM1、TIM8接 APB2能支持更高的时钟速率适配复杂功能通用 / 基本定时器接 APB1满足常规需求。各类型核心差异功能延伸高级定时器“死区生成 互补输出” 是电机驱动的关键比如三相电机需要互补 PWM 并避免上下桥臂同时导通“刹车输入” 可紧急切断输出安全保护通用定时器“输入捕获” 用于测信号频率 / 占空比比如红外遥控解码“编码器接口” 可直接读取电机编码器的转速 / 方向基本定时器功能最简仅用于基础定时比如定时触发 ADC 采样或配合 DAC 做波形生成实际应用场景上一级的定时器包含了下一级的所有功能高级定时器直流无刷电机、伺服电机的驱动电路通用定时器舵机 PWM 控制、红外信号解码、编码器测速基本定时器系统定时中断比如毫秒级延时、DAC 波形触发STM32F103C8T6 定时器资源TIM1、TIM2、TIM3、TIM4补充常见 STM32 芯片的定时器外设以 F1 系列为例不同型号的 STM32定时器数量 / 类型会有差异以下是常用型号的配置STM32F103C8T6小容量定时器TIM1高级、TIM2~TIM4通用 → 共 4 个STM32F103RCT6中容量定时器TIM1高级、TIM2~TIM4通用、TIM5~TIM7TIM5/T6/T7TIM5 是 32 位通用TIM6/T7 是基本 → 共 7 个STM32F103ZET6大容量定时器TIM1高级、TIM8高级、TIM2~TIM7TIM2/T3/T4/T5 是通用TIM6/T7 是基本 → 共 8 个STM32F103VET6中大容量定时器TIM1高级、TIM2~TIM4通用、TIM5~TIM7TIM5 通用、TIM6/T7 基本 → 共 7 个下面我们一个一个从简到难来进行分析基本定时器拥有定时中断、主模式触发 DAC 的功能1.定时中断RCC开启时钟之后进入内部时钟因为基本定时器没有外部时钟然后进入到下面的时基单元首先是PSC预分频它可以对原本的时钟的72MHz进行分频如果给0那就是不分频如果给的是1那就是72MHz/236MHz如果给的是2那就是72MHz/324MHz,这个预分频器是 16 位的所以最大值可以写 65535, 也就是 65536 分频然后就是CNT计数器然后这个就会对预分频后的时钟进行脉冲计数来一个上升沿就会加1这个CNT也是16位的也就是说它记到65535就会清零重新开始最后就是这个自动重装载寄存器他可以设置一个值如果CNT在自增的时候值达到了这个值就会触发后面的UI也就是更新中断这个更新中断之后就会通往 NVIC, 我们再配置好 NVIC 的定时器通道就会给CPU响应UI下面的通道是更新事件他不会响应CPU但是他会响应其他的电路的工作2.主模式触发 DAC 的功能后续会详细讲的基本定时器的 “主模式触发 DAC” 功能是让定时器定时产生触发信号驱动 DAC 输出连续的模拟波形1. 作用DAC 是 “数模转换器”能把数字信号转成模拟电压但要输出连续波形比如正弦波、三角波需要按固定时间间隔更新 DAC 的数字值基本定时器通过 “主模式” 可以定时产生触发信号TRGO 信号每当定时器定时完成一次就给 DAC 发一个 “更新指令”让 DAC 切换到下一个数字值。最终效果定时器按固定时间触发 DAC 更新DAC 输出连续的模拟波形比如 1ms 触发一次就能输出 1kHz 的波形2.好处就是不用手动触发DAC转换频繁占据CPU可以直接用主模式就可以自动完成仅需要把更新事件通过主模式映射到 TRGO, 然后 TRGO 就会直接去触发 DAC 了精准同步定时器的定时精度很高比如 us 级能让 DAC 波形的频率、周期更稳定。节省 CPU 资源不需要 CPU 频繁主动给 DAC 写值由定时器硬件自动触发降低了 CPU 的负担简化代码只需配置好定时器的定时时间 DAC 的波形数据硬件就能自动输出连续波形代码逻辑更简洁通用定时器拥有基本定时器全部功能并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能“外部时钟模式 2”TIMx_ETR引脚是 STM32 通用定时器的一种时钟源配置方式核心是用TIMx_ETR引脚输入的外部信号作为定时器的计数时钟1. 核心逻辑定时器默认用内部时钟比如 72MHz计数但 “外部时钟模式 2” 会让定时器不依赖内部时钟而是跟着外部信号的边沿上升沿 / 下降沿来计数—— 外部信号每跳变一次定时器的计数器就 1。2. 适用场景需要对外部设备的脉冲信号计数 / 测频率的场景比如接旋转编码器编码器每转一个角度就发一个脉冲定时器用外部时钟模式 2 计数就能算出转速比如接红外传感器传感器检测到物体时发脉冲定时器计数就能统计物体经过的数量。3. 与 “外部时钟模式 1” 的区别外部时钟模式 1 是用TIMx_CHx引脚通道引脚输入信号而模式 2 是用专属的TIMx_ETR引脚ETR 引脚的滤波、分频功能更灵活抗干扰能力更强“外部时钟模式 1”TIMx_ETR引脚定时器的专属外部触发引脚比如 TIM2 的 ETR 对应 PA0ITR0~ITR3来自其他定时器的内部触发信号比如 ITR1 可以接 TIM1 的触发输出TI1F_EDTIMx_CH1的边沿也就是下方TIMx_CH1通过边沿到TI1F_ED这个无论是上升沿还是下降沿都是可以的)TI1FP1,TI2FP2:TIMx_CH1,TIMx_CH2的引脚输出比较电路可以用于PWM波形驱动电机输入捕获电路测输入方波频率高级计数器其实高级电路也就是比通用电路多了上面几个地方的改动1.REP寄存器原本每达到一次周期就会进行UI但是有了这个重复次数寄存器就可以设置几个周期进行一次UI相当于对这个输出的更新信号又进行一次分频。原本计时器最大时间是59.65现在乘以65536那么时间就会变的很长了解释一下无 REP 时的最大定时之前算的 59.65s是1 个计数周期的最大定时预分频器、自动重装寄存器都设为 16 位最大值 65535高级定时器的 REP 寄存器的作用REP 是 16 位寄存器最大值是 65535对应 “重复 65536 次”。它的逻辑是定时器每完成 1 次计数周期从 0 数到自动重装值REP 计数器减 1直到 REP 减到 0才触发最终的更新事件所以最大定时时间会 “乘以 65536”原本 1 个周期最大是 59.65s加上 REP 重复 65536 次后最大定时时间 59.65s × 65536 ≈ 59.65×6.55 万 ≈ 3908224 秒 ≈ 45 天本质是REP 让定时器 “连续重复多个计数周期”相当于把定时时间 “拉长了 (REP1) 倍”所以原最大定时会乘以 REP 的最大倍数65536我圈出的区域是高级定时器的 “刹车功能 死区生成” 模块这是高级定时器特有的、用于电机驱动等场景的核心安全 / 控制功能分两部分解释一、下方红色圈刹车功能BRK1. 核心组成输入TIMx_BKIN高级定时器的 “刹车引脚”硬件安全输入口极性选择设置刹车信号的有效电平高电平 / 低电平触发刹车时钟失效事件来自时钟安全系统CSS的信号若定时器时钟故障也会触发刹车。2. 功能作用“刹车” 是紧急停止功能当TIMx_BKIN引脚收到有效信号或时钟失效时会立即切断定时器的 PWM 输出比如让OC1~OC4输出强制变高 / 变低同时冻结计数器。典型场景电机驱动中遇到过流、急停按钮按下等危险情况时通过刹车功能快速关闭 PWM防止硬件损坏。二、右侧红色圈死区生成DTG1. 核心组成DTG 寄存器存储 “死区时间” 的配置值DTG 模块根据寄存器值在 PWM 信号中插入 “死区”互补输出TIMx_CHxN高级定时器支持 “主通道CHx 互补通道CHxN” 的成对输出比如CH1和CH1N。2. 功能作用“死区” 是在互补 PWM 的高低电平切换之间插入的一段 “无输出” 时间比如电机的 H 桥驱动中CH1控制上桥臂 MOS 管、CH1N控制下桥臂 MOS 管如果两者同时导通会导致电源短路死区生成模块会让 “上桥臂关闭后延迟一小段时间死区再打开下桥臂”反之同理避免上下桥臂同时导通总结你圈出的区域是高级定时器适配 ** 功率器件驱动如电机、逆变器** 的关键功能刹车功能→紧急安全保护死区生成→避免功率器件短路溢出频率还有计数频率CK_CNT CK_PSC / (PSC 1)计数器的计数频率CK_CNT 预分频器输入频率CK_PSC÷ 分频系数(PSC 1)1 个溢出周期完成从 0 计数到目标值的时间的时间 计数次数 ÷ 计数频率 (ARR 1) / CK_CNT溢出频率CK_CNT_OV 1 / 周期时间 CK_CNT / (ARR 1)把上面的CK_CNT CK_PSC / (PSC 1)带入得到溢出频率CK_CNT_OV CK_PSC / (PSC 1) / (ARR 1)溢出频率的核心作用是直接对应 “定时器的定时 / 触发节奏”是定时器实际功能落地的关键指标具体用处可以分场景看1. 实现 “精准定时任务”溢出频率对应 “定时中断的频率”比如溢出频率是 1000Hz就意味着每 1ms 触发一次定时中断溢出频率对应 “定时中断的频率”当溢出频率是 1000Hz 时意味着 “1 秒钟内定时器溢出 1000 次”那么每次溢出的时间间隔就是1秒 ÷ 1000次 0.001秒 1ms而定时中断的触发逻辑是定时器每溢出一次就会触发一次定时中断。所以溢出频率1000Hz就对应了 “每 1ms 触发一次定时中断”典型场景在中断里实现 “毫秒级延时”“定时采集传感器数据”“周期性刷新 OLED 显示” 等。2. 控制 PWM 波的频率对于输出 PWM 的场景PWM 的频率等于定时器的溢出频率因为 PWM 的一个周期对应定时器的一次溢出。比如电机控制中需要 50Hz 的 PWM舵机常用频率就可以通过配置PSC和ARR让溢出频率等于 50Hz。3. 同步外设动作溢出时产生的TRGO触发信号之前讲过的主模式触发其频率就是溢出频率。比如让 ADC 按溢出频率定时采样或者让 DAC 按这个频率更新波形数据实现 “外设间的精准同步”。4. 计算实际定时时间知道溢出频率后反过来可以算出单次定时的时间定时时间 1 / 溢出频率比如溢出频率是 100Hz定时时间就是 10ms溢出频率是 1Hz定时时间就是 1 秒。“计数器无预装时序” 对应的是定时器中自动重装寄存器ARR的 “无预装载模式”核心是理解ARPE位自动重装预装载使能位的作用下面分细节讲1. 先明确核心概念“预装载寄存器”定时器的ARR自动重装寄存器实际是 **“影子寄存器 预装载寄存器”** 的结构预装载寄存器是你写配置值的 “缓冲寄存器”影子寄存器是实际参与计数器计数比较的 “工作寄存器”2.ARPE0无预装载模式你图中对应的场景当ARPE位配置为 0 时预装载寄存器被关闭—— 你写入ARR的数值会立即同步到影子寄存器不需要等 “更新事件”计数器溢出3. 无预装的时序特点对应图 105 的逻辑以 “修改ARR值” 为例时序流程是你通过代码向ARR写入新值新值立刻直接更新到影子寄存器计数器下一个计数周期就会用这个新的ARR值作为计数目标4. 无预装模式的优缺点优点修改ARR后生效速度快适合需要 “立即改变定时周期” 的场景缺点如果在计数器计数过程中修改ARR可能导致 “半个周期” 的异常比如原本要计数到 100中途改成 50计数器会直接从当前值开始往 50 计数破坏原有的周期节奏。对比ARPE1有预装载模式当ARPE1时写入ARR的新值会先存在预装载寄存器等下一次 “更新事件”计数器溢出发生时才同步到影子寄存器生效—— 这种模式能保证周期的完整性但生效有延迟总结“无预装时序” 是ARPE0时的工作方式核心是ARR配置值 “立即生效”适合对实时性要求高但可以接受周期波动的场景。RCC时钟树左边的时钟产生电路一、顶部模块内部高速时钟HSI电路8MHZ HSI RC内部 8MHz 的 RC 振荡器无需外部晶振芯片上电就能用/2 分频可选将 HSI 分频为 4MHz 后输出作用作为默认系统时钟芯片刚上电时还没配置外部晶振时用它或作为 PLL 的输入源之一。二、中间模块锁相环PLL倍频电路PLLSRC选择 PLL 的输入源可以选 HSI/2或外部高速时钟 HSEPLLMUL倍频器支持 ×2、×3…×16 等倍数PLLCLKPLL 输出时钟比如选 HSI/24MHz×16 → 输出 64MHz选 HSE8MHz×9 → 输出 72MHz作用将低频时钟HSI/HSE倍频到系统最大时钟72MHz给 CPU、内存等核心部件提供高速时钟。三、右侧模块系统时钟选择SW电路SW选择最终的系统时钟SYSCLK来源可选HSI内部 8MHzPLLCLKPLL 倍频后的时钟HSE外部高速时钟CSS时钟安全系统若当前系统时钟故障自动切回 HSI保证芯片不宕机作用决定整个芯片的核心工作频率比如选 PLLCLK72MHz芯片就以 72MHz 运行。四、底部模块外部 / 内部低速时钟电路HSE OSC外部高速晶振4-16MHz接 OSC_IN/OSC_OUT 引脚比 HSI内部时钟 更稳定但是如果要求不大就可以选择内部时钟LSE OSC外部低速晶振32.768kHz给 RTC 提供精准的实时时钟LSI RC内部 40kHz 低速 RC 振荡器给独立看门狗 IWDG 提供时钟作用提供稳定的外部时钟HSE或专用低速时钟LSE/LSI适配不同外设需求。看完后我们可以分析一个问题就是为什么外部时钟如果出现问题为什么时钟好像慢了10倍要理解 “外部时钟故障后系统时钟变慢 10 倍” 的现象核心是STM32 的时钟安全系统CSS的 “故障降级机制”通常我们会将系统时钟配置为外部高速时钟HSE比如 8MHz 晶振→ 送入 PLL 倍频 ×9 → 输出PLLCLK72MHz→ 作为SYSCLK系统时钟当HSE出现故障比如晶振损坏、接触不良时钟安全系统CSS会立即触发 “时钟切换”自动将系统时钟SYSCLK从PLLCLK切回内部高速时钟HSI8Hz因为 PLL 的输入源默认是HSE故障后 PLL 会停止工作CSS 的逻辑是 “快速切换到稳定的内部时钟”而不是重新配置 PLL避免故障时的复杂操作所以直接用 HSI 的原始频率8MHz作为系统时钟右边的时钟分配电路其实就是所有时钟都是72MHz然后输出。这里没什么要懂的可以条跳过了

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询