13. STM32 定时器与 PWM 实战指南

STM32使用定时器、PWM波 【代码】STM32使用定时器、PWM波。 阅读详情

摘要:本文系统讲解 STM32 定时器与 PWM 的实战应用。文章从时钟信号基础入手,依次介绍 SysTick 系统滴答定时器的原理与配置、TIM 通用定时器的核心组件与定时算法,再到 PWM 脉冲宽度调制的核心参数与生成原理,并通过 LED 闪烁、蜂鸣器控制、串口重定向等实验演示具体用法。随后讲解 SG90 舵机的硬件参数、控制协议与驱动实验,最后介绍硬件定时器通道不足时使用基本定时器中断模拟 PWM 的高级技巧,并给出注意事项。

1. 时钟信号基础

时钟是单片机的心脏,决定了系统的运行节奏。

  • 频率 (f):时钟信号在一秒钟内的重复次数。
  • 单位:赫兹 (Hz)
  • 公式:f = 1/T
  • 周期 (T):一个时钟信号持续的时间。
  • 单位:秒 (s)
  • 公式:T = 1/f

2. SysTick 系统滴答定时器

2.1 简介与特性

  • 定义:Cortex-M 系列内核集成的 24 位递减计数器(异常编号 15)。
  • 作用:
    • 裸机开发:用于产生精准延时。
    • 操作系统:作为时基单元(Time Base),维持系统心跳(如 FreeRTOS、uCOS)。
  • 时钟源:
    1. 内部时钟:FCLK(自由运行时钟,通常等于系统主频 HCLK)。
    2. 外部时钟:STCLK(通常为 HCLK 的 8 分频)。

2.2 工作原理

  1. 设定初值(重装载值)并使能。
  2. 每来一个时钟脉冲,计数值减 1。
  3. 计数减到 0 时,触发异常(中断),计数器自动重装初值并继续循环。
  4. 最大计数值:2^24 = 16,777,216。

2.3 定时计算与配置实例

计算公式:

定时时间 = (ARR + 1) × (PSC + 1) / 输入时钟频率

(注:SysTick 通常只有重装载值,无独立 PSC 寄存器,若使用外部 8 分频源需考虑分频系数)

表格

输入频率目标时间计算过程配置建议
32 kHz200 ms32000×0.2=6400计数值:6400
160 MHz2 s160,000,000×2=320,000,000(溢出)需配合分频器使用

2.4 STM32F411 默认行为分析

  • 默认配置:
  • 输入频率:16 MHz
  • 重载值 (Reload Value):16,000 - 1

  • 中断状态:默认开启
  • 结果推导:

T=16000/16,000,000=0.001s=1ms

  • HAL库机制:
  • SysTick每1ms触发一次中断,全局变量 uwTick 自增。
  • HAL_Delay(ms) 函数通过轮询 uwTick 的差值来实现延时。

2.5 ⚠️ HAL_Delay 在中断中卡死问题

  • 现象:在外部中断服务函数中调用 HAL_Delay,程序卡死。
  • 原因(死锁):
    1. HAL_Delay 等待 uwTick 增加。
    2. uwTick 增加依赖于 SysTick 中断。
    3. SysTick 优先级通常最低。
    4. 当前外部中断正在执行,阻塞了低优先级的 SysTick 中断,导致 uwTick 永远不增加,死循环等待。
  • 解决方案:
    • 推荐:中断服务函数应“快进快出”,严禁在中断中使用延时函数。
    • 不推荐:提高 SysTick 的抢占优先级(会破坏系统实时性逻辑)。


3. TIM 通用定时器

分为基本定时器、通用定时器、高级定时器

定时器类似于我们生活中的闹钟,可以设定一个时间来提醒我们。定时器可以作为基本的定时器/计数器,

用于生成周期性的定时中断或作为计数器来计数外部事件的脉冲数。例如1秒钟进入定时器中断干一件事,定时器可以配置为产生脉冲宽度调制(PWM)信号,用于控制电机速度、LED亮度调节、风扇风速调节等应用。

3.1 核心组件

定时器类似于可编程闹钟,主要包含三个关键寄存器:

预分频器 (PSC):对输入时钟进行分频。

自动重装寄存器 (ARR):决定计数的周期(决定频率)。

计数器 (CNT):实际进行加减计数的寄存器。

3.2 定时算法训练

公式: fout=fclk(PSC+1)(ARR+1)

输入频率目标时间/频率PSC 配置ARR 配置备注
10 kHz计时 5s10-150000-1需较大ARR
55 MHz计时 5s55000-15000-1先分频至1kHz
5 MHz计时 14ms500-1140-1/
45 MHz计时 127ms45000-1127-1/
24 kHz计时 12s24-112000-1/
33 MHz计时 5s33000-15000-1/

3.3 实验:LED闪烁 (1s间隔)

实验要求:LED4每隔1s切换一次状态

1、打开一个定时器

2、配置定时器产生1ms的定时周期

3、在NVIC中打开中断

4、打开LED4引脚为OUTPUT

5、开启定时器

6、重写回调函数,在定时器回调函数中切换LED4的状态

TIM1对应APB2总线

配置思路 (16MHz输入):

  • 目标:1s (1000ms)
  • PSC: 16000-1 →→ 分频后频率 1kHz (1ms/次)
  • ARR: 1000-1 →→ 计数1000次 = 1s

MX配置:

    代码逻辑:

    // 1. 开启定时器中断
    HAL_TIM_Base_Start_IT(&htim1);
    // 2. 重写回调函数
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
    if (htim->Instance == TIM1) {
    // 切换LED状态
    HAL_GPIO_TogglePin(LED4_GPIO_Port, LED4_Pin);
    }
    }

    4. PWM 脉冲宽度调制

    PWM,全称为脉冲宽度调制(Pulse Width Modulation),是一种调节信号的方法。简单来说,PWM 就是通过改变信号的高电平和低电平的时间比例来控制输出的平均电压或功率。

    4.1 核心参数

    • 周期 ( T): T=1/f。如果频率为50Hz ,也就是说一个周期是20ms,那么一秒钟就有50次PWM周期。-->1000 ms / 50 = 20 ms
    • 占空比 (Duty Cycle):高电平时间占整个周期的比例 (0%∼100% )。
    • 分辨率:由 ARR 决定。精度越高,ARR 越大。

    4.2PWM生成原理

    PWM的频率就是在输入频率的基础上进行了两次分频

    一次PSC 另一次ARR

    4.2 蜂鸣器控制实验

    • 需求:16MHz输入,PWM10kHz频率,1%精度,占空比 0。
    • 计算:
      • 频率 10kHz →→ 周期 0.1ms。
      • 1%精度 →→ 将周期分为100份。
      • 16,000,000/10,000=1600(总分频数)。
      • PSC: 16-1 (分频后1MHz)。
      • ARR: 100-1 (1MHz / 100 = 10kHz)。
      • CCR: 控制占空比 (0~100)。

    4.3 串口重定向 (printf)

    为了调试方便,通常重定向 fputc 到 USART1(注意添加头文件:#include "stdio.h"):

    int fputc(int ch, FILE *p)
    {
        while(!(USART1->SR & (1<<7))); // 等待发送缓冲区空 (TXE)
        USART1->DR = ch;
        return ch;
    }

    4.4PWM编程

    打开定时器PWM通道

    HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);

    按键检测调整占空比

    if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)
    {
            HAL_Delay(20);
            while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0);
            HAL_Delay(20);
    }
    

    5. SG90 舵机控制

    5.1 硬件参数

    • 电压:4.8V - 6V。
    • 信号线:橙色线,接收PWM信号。
    • 角度范围:0° ~ 180°。

    工作电压 4.8V - 6V(典型5V)

    电流消耗 100mA(空闲),250mA(运行)

    扭矩 1.2kg·cm(4.8V),1.6kg·cm(6V)

    转速 0.12秒/60°(4.8V),0.10秒/60°(6V)

    重量 9克

    尺寸 22.2mm × 11.8mm × 31mm

    转动角度 180°(部分型号支持360°)

    齿轮材质 塑料(部分型号为金属齿轮)

    接口类型 3针(信号、电源、地)

    5.2 控制协议

    舵机通过高电平持续时间来控制角度,标准周期为 20ms (50Hz)。

    高电平脉宽对应角度备注
    0.5 ms0°最小脉宽
    1.5 ms90°中位
    2.5 ms180°最大脉宽
    • 脉冲宽度:0.5ms - 2.5ms,对应角度0° - 180°。

    控制舵机的信号是周期为20ms的PWM,一个周期的高电平的范围是0.5~2.5ms,其他时间为低电平。

    我们可以用另一种方法来看:前2.5ms是可变化的高低电平,后17.5ms是固定的低电平,只需要控制前2.5ms的电平变化即可。

    例如:

    需要输出0.5ms高电平,那么就是0.5ms高电平 + 2.0ms低电平 + 17.5ms固定低电平;

    需要输出1.0ms高电平,那么就是1.0ms高电平 + 2.5ms低电平 + 17.5ms固定低电平;

    如此类推,实际我们只需要控制前2.5ms的高低电平分配,其他时间都保持低电平即可。

    只要改变占空比就能让舵机转动,0~180°

    注意:180°舵机与360°舵机底层原理并不相同,所以编程时我们应注意舵机种类。

    5.3舵机控制实验

    保证PWM周期的时长为20ms 频率50HZ--->定时器的定时时间为20ms

    16Mhz的输入频率,预分频 1600-1 ARR:200-1

    16Mhz-->50HZ

    高电平时长调节的最小单位可达 0.1ms 可实现二十档,满足普通实验需求。

    int main(void)
    {
      /* USER CODE BEGIN 1 */
      /* USER CODE END 1 */
      /* MCU Configuration--------------------------------------------------------*/
      /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
      HAL_Init();
      /* USER CODE BEGIN Init */
      /* USER CODE END Init */
      /* Configure the system clock */
      SystemClock_Config();
      /* USER CODE BEGIN SysInit */
      /* USER CODE END SysInit */
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_TIM5_Init();
      MX_USART1_UART_Init();
      /* USER CODE BEGIN 2 */
      HAL_TIM_PWM_Start(&htim5,TIM_CHANNEL_1);
      int angle=5;
      /* USER CODE END 2 */
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
        /* USER CODE END WHILE */
        /* USER CODE BEGIN 3 */
        if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_2)==0)
        {
          HAL_Delay(20);
          while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_2)==0);
          angle+=1;
          if(angle > 25)
          {
            angle=25;
          }
          __HAL_TIM_SetCompare(&htim5, TIM_CHANNEL_1, angle);
          HAL_Delay(20);
        }
      }
      /* USER CODE END 3 */
    }

    6. 软件模拟 PWM (高级技巧)

    当硬件定时器通道不足时,可使用基本定时器中断模拟PWM。

    外部晶振使用

    因为最小步距要求是1%调节,而单个周期的长度为1ms,定时时间不能高于最小步距10us要求,但是可以更小。

    以此为例,定时器进行模拟时,最大的定时时间为10us,最小定时时间可以比10us低,比如调整1us

    此处我们将定时器设置为1us的定时时间

    基于当前要求,10us的定时时间可实现1%的调节精度

    当前选用TIM10基本定时器实现定时,可知其输入频率为25Mhz

    计时10us PSC=1 ARR 25

    ⚠️ 注意事项:软件模拟PWM非常消耗CPU资源。如果定时时间过短(如1us),会导致主程序无法运行。建议模拟PWM的频率不要太高(周期建议在100us以上)。

    定时器10会每隔10us触发一次中断回调

    按键使能

    主程序打开中断

            HAL_TIM_Base_Start_IT(&htim10);
    int duty_beep=0;
    int BEEP_DUTY=30;
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
            if(htim == &htim10)
            {
        }
    }
    //按键消抖
               if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_2)==0)
                {
                        HAL_Delay(20);
                        while(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_2)==0);
                        HAL_Delay(20);
                }

    整体架构

    /* USER CODE BEGIN 0 */
    int duty_beep=0;
    int BEEP_DUTY=30;
    void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
    {
      if(htim == &htim10)
      {
        duty_beep++;
        if(duty_beep >= 100)
          duty_beep=0;
        if(duty_beep < BEEP_DUTY)
          HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,1);
        else
          HAL_GPIO_WritePin(GPIOC,GPIO_PIN_6,0);
      }
    }
    /* USER CODE END 0 */
    /**
      * @brief  The application entry point.
      * @retval int
      */
    int main(void)
    {
      /* USER CODE BEGIN 1 */
      /* USER CODE END 1 */
      /* MCU Configuration--------------------------------------------------------*/
      /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
      HAL_Init();
      /* USER CODE BEGIN Init */
      /* USER CODE END Init */
      /* Configure the system clock */
      SystemClock_Config();
      /* USER CODE BEGIN SysInit */
      /* USER CODE END SysInit */
      /* Initialize all configured peripherals */
      MX_GPIO_Init();
      MX_TIM10_Init();
      MX_USART1_UART_Init();
      /* USER CODE BEGIN 2 */
      HAL_TIM_Base_Start_IT(&htim10);
      /* USER CODE END 2 */
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
        /* USER CODE END WHILE */
        /* USER CODE BEGIN 3 */
        if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0)
        {
          HAL_Delay(20);
          while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==0);
          BEEP_DUTY+=10;
          if(BEEP_DUTY> 100)
          {
            BEEP_DUTY=100;
          }
          HAL_Delay(20);
        }
      }
      /* USER CODE END 3 */
    }

    八、stm32-TIM定时器(PWM) 阅读详情

    相关推荐

    电机控制易混知识点1-基波频率/载波频率/采样频率

    在电机控制学习工作中会接触到很多专业名词,其中基波频率,载波频率,采样频率是最常接触到的,特别对于电机控制小白开说,不容易理解,现对这几个概念做下总结归纳。

    新能源电机控制工程师 | 聚焦实战问题,搭建互助平台 分享电机控制代码调试、现场故障排查、算法优化中的真实困惑;开放讨论电机基础知识以及工作中遇到难点等共性难题。拒绝单向输出,只做工程师的“技术树洞”与“解忧杂货铺”! 2194

    STM32CubeMX之定时器TIM,PWM

    1、配置基础定时器产生周期中断; 2、配置通用定时器产生PWM;

    while(1) 2万+

    JQ8900语音播报模块在RT-Thread系统下的驱动移植与测试详解

    本文详细讲解了如何在RT-Thread嵌入式操作系统中,为JQ8900语音播报模块进行驱动移植与功能测试。内容涵盖从获取驱动代码、配置Kconfig工程、编译烧录到核心代码解析的完整流程,并提供了基于串口通信的上电测试与问题排查方法,帮助开发者快速掌握在RT-Thread系统下集成外部模块的核心技能。

    weixin_35677363的博客 593

    STM32CubeMX学习笔记(13)——PWM输出(呼吸灯)使用

    一、PWM简介 **脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调试。**是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。广泛应用在从测量、通信到功率控制与变换的许多领域中。 例如上图中,图b)是微处理输出的数字信号,实际上他接到电机等功率设备上时,效果相当于图a)。这就是PWM调制。例如输出占空比为50%,频率为10Hz的脉冲,高电平为3.3V.则其输出的模拟效果相当于输出一个1.65V的高电平。脉冲调制有两个重要的参数,第一个就是输

    Leung的博客 1万+

    利用 vivado实现加减法器的设计

    本科计组实验:利用 vivado实现加减法器的设计

    qq_52052302的博客 1万+

    DPI — 业务识别技术

    目录 文章目录目录DPI 的业务识别技术类型特征识别Protocol 特征Payload 特征关联识别行为识别 DPI 的业务识别技术类型 DPI 的关键技术是能够高效的识别出网络上的各种应用类型。 浅报文检测是通过端口号来识别应用类型的。如:检测到端口号为 80 时,则认为是 HTTP 协议。但实际上,为了应用的安全性考虑通常不会使用默认端口来暴露业务能力。此时采用 L2 ~ L4 层的传统检测方法已无能为力了。 而 DPI 技术与我们熟知的防病毒软件在某些方面比较类似,即:其能识别的应用类型必须是系统已

    烟云的计算 3518

    STM32CubeMX——定时器PWM实现

    功能实现: 采用定时器PWM功能实现呼吸灯的功能,PWM频率为1KHz,呼吸灯周期为1s 准备工作: 1、STM32开发板(我的是STM32F103VET6) 2、STM32CubeMx软件、 IDE:Keil软件 3、按键管脚 : PA0 PC13 4、LED管脚: PB0 PB1 PB5 什么是PWM ​ 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术...

    lcp0633的博客 8089

    Spring AI 实战(11):收官!10 道面试高频题 + 一张脑图带走全系列

    本文是Spring AI系列的收官篇,通过知识脑图梳理前10篇内容,提供面试高频题和避坑清单。主要内容包括: 知识脑图:分6层(核心抽象、输入增强、输出控制等)总结Spring AI全栈技术。 10道高频面试题:涵盖ChatClient/ChatModel关系、结构化输出、RAG链路等核心知识点。 避坑清单:列出9条常见问题及解决方案,如向量维度匹配、Advisor顺序等。 技术对比:分析Spring AI、LangChain4j和Spring AI Alibaba的差异与适用场景。 使用建议:提供面试复习

    不才不才不不才的博客 296

    STM32--定时器输出pwm的几种模式

    在STM32的定时器模块中,输出比较模式和PWM模式各有其特定的应用场景和优缺点。

    code_snow的博客 7403

    SAP-ABAP:ABAP 开发基础概念入门:写给刚踏入 SAP 开发世界的新人

    本文介绍了 ABAP 开发语言的基础概念,帮助 SAP 开发新人快速入门。主要内容包括: ABAP 的发展历程与核心优势 - 作为 SAP 平台的专属语言,ABAP 在企业级应用开发中具有深度集成、数据处理高效和长期稳定的特点 ABAP 开发环境概览 - 介绍了 SE38、SE80 等关键事务码,以及 ABAP 工作台的核心组件和开发权限管理 基础语法入门 - 重点讲解了 ABAP 特有的数据类型体系(特别是结构体和内表),并通过 Hello World 示例展示程序基本结构 文章通过对比 ABAP 与 J

    baidu_35680696的博客 511

    【重要内容】敬告读者

    由于优快云近期将要搞事情,此专栏建议已购买的用户将内容保存到本地。尚未购买的用户请待9月1日后再决定是否需要购买。如此规则上线,本人将会关闭此专栏。并寻找其他渠道进行发布。

    魔落的博客 910

    STM32 CubeIDE(八)通用定时器PWM

    STM32 CubeIDE(八)通用定时器PWM 通用定时器 STM32F407 系列控制器有10 个通用定时器,所有通用定时器都是彼此独立的,不共享任何资源。 APB1接口定时器(42MHz): TIM2、TIM5:32位计数器、支持向上计数、向下计数、向上向下计数,可生产DMA请求、四路捕获/比较通道,支持正交解码。 TIM3、TIM4:16位计数器、支持向上计数、向下计数、向上向下计数,可生产DMA请求、四路捕获/比较通道,支持正交解码。 TIM12:16位计数器、支持向上计数,两路捕获/比较通道。

    LiaoZiJi的博客 4842

    代谢组数据分析(零):从质谱样本制备到MaxQuant搜库(蛋白质组和代谢组)

    本文详细介绍了代谢组数据分析的过程,从LC-MS/MS技术的样本制备、分离、质谱鉴定到MaxQuant软件的使用。LC-MS/MS包括样本制备、液相色谱分离、质谱上机和鉴定等步骤。MaxQuant在蛋白质定性和定量中扮演关键角色,通过搜库和数据处理提供精准结果。此外,文章还涉及了数据采集模式、质谱图谱解析、数据库和软件选择以及结果评估等方面

    专注生信领域 8593

    STM32定时器与PWM(STM32F103C86)

    stm32中有8个定时器,其中4个通用定时器、2个基本定时器和2个高级定时器定时器种类位数计数器模式产生DMA请求捕获/比较通道互补输出特殊应用场景高级定时器 (TIM1, TIM8)16向上, 向下, 向上/下可以4有带死区控制盒紧急刹车, 可应用于PWM电机控制通用定时器 (TIM2~TIM5)16向上, 向下, 向上/下可以4无通用。定时计数, PWM输出, 输入捕获, 输出比较基本定时器 (TIM6, TIM7)16向上, 向下, 向上/下可以。

    z2863556945的博客 1480

    SIMATIC S7-1200, S7-1500 PID 控制[手册]

    SIMATIC S7-1200, S7-1500 PID 控制[手册]

    Data-Structures-and-Algorithm-Analysis-in-Java.pdf

    作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

    STM32定时器与PWM

    本文介绍了STM32定时器与PWM的应用实现。主要内容包括:1) 使用STM32CubeMX配置定时器中断,实现5秒串口发送和2秒LED闪烁的多任务并发;2) 通过PWM技术实现LED呼吸灯效果。硬件平台采用STM32F103C8T6最小系统板,软件环境为STM32CubeMX和Keil MDK。文章详细讲解了时钟树配置、定时器参数计算、中断优先级设置等关键步骤,并提供了完整的代码实现。对比了定时器中断与查询方式实现多任务的优缺点,最后介绍了PWM的基本原理及其在模拟量控制中的应用。

    2303_80679756的博客 707

    VB摄像头监控

    该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

    stm32(十二)通用定时器&输出PWM

    1、STM32F407ZGT6的通用定时器&PWM输出简介 STM32F407ZGT6有高级定时器、通用用定时器、基本定时器,不管什么类型的定时器都有定时的功能,不管什么类型的定时器都有时基单元。通用定时有TIM2~TIM5,TIM9~TIM14。 通用定时器和基本定时器的最主要的区别是:是否有“捕获/比较通道”(capture/compare channels)。 “捕获/比较通道...

    朗朗上口就行啦的博客 7425

    STM32F401的PWM输出

    PWM的说明 PWM有三个关键指标: PWM频率, 占空比, 区分度 对于同一个时钟频率下工作的单片机, 区分度是和PWM工作频率相关的, 因为总频率是固定的, PWM工作频率越高, 留下给区分度的部分就越低, 因此区分度就越低. 对于STM32, 如果时钟是72MHz, 在PWM频率为1KHz时, 区分度为16bit, 在281KHz时, 为8bit, 在4.5MHz时, 就是4bit了. S...

    IOsetting的专栏 4043

    STM32使用定时器和PWM进行点灯

    介绍:定时器(timer)是一种计时设备,通常用于测量时间间隔并在设定时间结束时发出信号。在计算机科学和电子工程中,定时器用于执行特定任务或操作,例如在预定时间内触发中断或测量事件持续的时间。原理:定时器的工作原理基于计数器,它根据一个固定的时钟周期进行计数。每个时钟周期,计数器会增加一次计数,通过计数值乘以时钟周期,可以得到一个时间段,这个时间段就是定时器设定的时间。定时器内部通常包含一个寄存器(如TCNT),用于存储总的计数值。

    2303_79816988的博客 1132

    【STM32H7 开发笔记】| 02 - 通过定时器级联方式同步启动多个定时器并输出 PWM 波形

    所有定时器包括两个高级控制定时器、十二个通用定时器、两个基本定时器、五个低功耗定时器、两个看门狗定时器和一个SysTick定时器。所有计时器计数器都可以在Debug模式下冻结。本次实验主频配置的是500MHz。

    机会是留给有准备的人 6556

    基于STM32CubeMX的定时器与PWM呼吸灯

    本次 STM32 实验借助 TIM2 和 TIM3 定时器开展,成功实现串口通信与点灯功能。在定时器设置环节,细致调整时钟源、预分频与重装载值,精准把控定时参数,为后续操作提供稳定时基。串口通信经引脚初始化与参数配置后,顺利达成数据收发,拓展了芯片对外交互能力。而对于点灯部分,尤其是两个 LED 呼吸灯效果的实现,依靠定时器中断精准改变占空比,使灯光亮度平滑渐变,如呼吸般自然。

    m0_74172414的博客 1414

    STM32 定时器应用实战:多任务定时与 PWM 呼吸灯

    通过本次实验,我掌握了 STM32 定时器的配置方法和 PWM 波形的生成原理,成功实现了多任务并发运行和 LED 呼吸灯效果。对比了查询方式和中断方式实现多任务的差异,深刻理解了定时器在嵌入式系统中对于精准定时和高效任务调度的重要性。同时,通过 STM32CubeMX 工具简化了配置过程,提高了开发效率。

    2301_79813872的博客 692

    STM32 定时器与 PWM 应用实验报告

    通过本次实验,我掌握了 STM32 定时器的配置和使用方法,成功实现了 5 秒定时串口发送和 2 秒定时 LED 闪烁的多任务功能。同时,利用 TIM3 和 TIM4 定时器的 PWM 功能,实现了两个 LED 的呼吸灯效果。定时精度更高,不受其他任务执行时间的影响CPU 利用率更高,不需要在延时循环中等待可以实现真正的并发多任务效果在 PWM 应用中,理解了占空比对 LED 亮度的影响,通过改变比较寄存器的值可以平滑地调节 LED 亮度,从而实现呼吸灯效果。

    2502_93446112的博客 1232

    STM32CUBEMX开发GD32F303(13)----定时器TIM捕获PWM测量频率与占空比

    本章STM32CUBEMX配置STM32F103,并且在GD32F303中进行开发,同时通过开发板内进行验证。本章STM32CUBEMX配置STM32F103输出PWM,同时使用TIM测量PWM频率和正占空比。需要GD样片的可以申请

    xh1479的博客 1万+

    基于stm32的PWM控制与多任务调度系统设计与实战

    本项目基于STM32微控制器实现了PWM控制与多任务调度系统。文章详细介绍了PWM技术原理、STM32中的硬件实现方法,包括定时器配置、参数计算和CubeMX设置步骤。系统通过硬件定时器实现多任务并发:任务1每5秒发送串口消息,任务2每2秒控制LED闪烁。文章对比了硬件PWM与软件PWM的优缺点,并展示了呼吸灯算法实现。项目配置涵盖了时钟树设置、GPIO、USART和定时器的详细参数,为STM32的PWM应用和多任务开发提供了实用参考方案。

    2301_79825245的博客 926

    STM32使用定时器与PWM实现串口通信和点灯

    (1)能够对内部时钟信号或外部输入信号进行计数,数值达到设定要求时,向CPU发起中断请求,完成外部程序的运行。(2)本质就是进行计数,选择内部时钟脉冲,作为计数器时,技术信号的来源选择非周期脉冲信号。(3)STM32中定时器可分为高级定时器、通用定时器、基本定时器三类,他们都是由一个可编程的16位预分频器(TIMX_PSC)驱动的16位。

    2202_75927751的博客 1376

    单片机-STM32部分:13、PWM

    例如输出占空比为50%,频率为10Hz的脉冲,高电平为3.3V.则其输出的模拟效果相当于输出一个1.65V的高电平。调节占空比最终会反映到输出的电流、电压上,或者可以理解为输出的总能量变化,100%占空比时输出100%能量,50%占空比时,只会输出一半的能量,例如50%占空比控制LED会比较暗,控制电机力气会比较小。预分频系数为 72-1,自动重装载值为 500-1,定时器溢出频率,即PWM的周期,就是 72MHz/(72)/(500) = 2kHz 这里的72是因为从0开始计算到71,500同理。

    嵌入式成长手册 2352
    上一篇: 12.STM32 定时器(TIM)从原理到实战:四种核心工作模式详解
    下一篇: 14.深入浅出 I2C 通信协议:从电平信号到完整驱动实现
    硅基造物主
    博客等级 码龄4年 17粉丝 42原创
    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    个

    红包个数最小为10个

    元

    红包金额最低5元

    当前余额3.43元 前往充值 >
    需支付:10.00元
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值