在步进电机控制时,经常会遇到需要输出指定个数的脉冲来实现精确控制。本篇文章将介绍怎样使用定时器输出指定个数的PWM脉冲。

硬件环境:STM32F103C8T6

软件环境:STM32CubeMX v6.1.1

HAL库:STM32CubeF1 Firmware Package V1.8.3

产生固定个数脉冲的方法也有很多,这里介绍两种常用的方法。

1.中断计数方式     

这种方式比较简单,定时器配置为PWM输出模式,在PWM中断中计数,当达到设定的个数后,停止PWM输出。这里以定时器1为例进行介绍,配置如下:

TIM1的通道2配置为PWM输出,分频系数、计数周期、脉宽等根据需要输出的PWM频率进行配置。需要打开定时器的捕获比较中断(TIM1高级定时器的中断是分开的,普通定时器只有一个中断)。

完成后生成代码。添加自己的程序。

首先定义一个全局变量,用于控制输出脉冲个数。

uint16_t PwmNum;

需要输出脉冲时,给该变量赋值,并启动PWM中断输出。

PwmNum = 10;HAL_TIM_PWM_Start_IT(&htim1,TIM_CHANNEL_2);

编写中断回调函数,判断PWM输出次数达到设定值时,停止PWM输出。​​​​​​​

void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim){       static uint16_t cnt = 0;       cnt++;       if(cnt == PwmNum)       {              cnt = 0;              HAL_TIM_PWM_Stop_IT(&htim1,TIM_CHANNEL_2);       }}

编译运行程序,可以看到,输出了10个PWM脉冲,说明程序正确。

2.主从定时器门控方式     

中断计数的方式实现起来很简单,但也存在明显的缺点。当PWM频率较高时,频繁的中断将影响程序运行的效率。遇到这种情况就需要采用主从定时器门控的方式来实现。所谓主从模式就是将主定时器作为触发源,触发从定时器来工作。

STM32CubeMX配置

主定时器为TIM1,通道2配置为PWM输出,使能主从模式,触发事件选择为更新事件,不需要开启中断。

从定时器为TIM2,从模式选择为门控模式,触发源选择ITR0,开启定时器2中断。

触发源的选择需要查看数据手册中进行选择,TIM2为从定时器、TIM1为主定时器时选择ITR0。

       程序编写

配置完成后生成代码,编写自己的程序。​​​​​​​

__HAL_TIM_SET_AUTORELOAD(&htim2,5-1); //设置要输出的PWM脉冲数 5个HAL_TIM_Base_Start_IT(&htim2);             //启动从定时器HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);  //启动主定时器PWM输出

编写定时器2中断回调函数:​​​​​​​

void  HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){    if(htim == &htim2)    {        if(__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_CC2) != RESET)  //判断是否触发中断           {            __HAL_TIM_CLEAR_FLAG(&htim2, TIM_FLAG_CC2);      //清除中断标志            HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_2);   //关闭主定时器            HAL_TIM_Base_Stop_IT(&htim2);         //关闭从定时器        }    }}

完成后编译程序下载测试,可以看到输出了5个频率为10KHz的PWM脉冲,与程序中一致。

      3.总结

两种方式都可以产生指定个数的PWM脉冲,各有优缺点。中断计数的方式实现简单,但不适合频率较高的PWM应用。主从定时的方式占用CPU资源少,但是占用了两个定时器。用户需要根据实际需求选择用哪种方式。

STM32定时器产生指定个数脉冲相关推荐

  1. STM32F407-高级定时器输出指定个数PWM功能

    高级定时器输出指定个数PWM只需要设置好重复计数器寄存器RCR的值并打开更新中断即可. 一般情况下的更新中断是在CNT计数到ARR的时候产生,而在设置了RCR后,更新中断将会延迟,比如设置RCR的值为 ...

  2. cube 设置滴答定时器_CubeMX配置定时器产生指定个数的脉冲

    1.配置定时器PWM输出 2.配置定时参数并开启中断 3.生成工程并定义一个全局变量来保存要发送脉冲的个数 uint8_t PWMnum; 4.使用库函数封装一个设置脉冲个数并开启PWM输出的函数 v ...

  3. STM32的单脉冲模式实现精确个数脉冲

    我们在做嵌入式产品的开发过程中,有时需要输出指定数目的脉冲.实现它的方法较多,这里介绍一种利用 STM32定时器的单脉冲模式来实现的方法. STM32定时器的单脉冲输出功能,其实是定时器输出比较功能的 ...

  4. STM32定时器单脉冲输出模式

    本文整理于 https://www.sohu.com/a/292903672_807475 原文作者:茶话MCU STM32定时器单脉冲输出模式 单脉冲输出模式是定时器比较输出应用中的一种特殊情况或者 ...

  5. STM32 - 定时器基础应用说明 - 04 - N-pulse waveform generation using one-pulse mode - 用OPM模式产生N次脉冲

    前言:N-PULSE模式,就是PLUS模式+Mask(利用UDIS的屏蔽) Repetition的特性: 那么首先-N-PULSE可以定制波形的各个方面,然后,将这个定制进行重复,那不就是可以无限的定 ...

  6. STM32定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量

    STM32 定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量 文章目录 STM32 定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量 编 ...

  7. STM32定时器-基本定时器

    STM32定时器-基本定时器 实验芯片:STM32F103 更新日期:2021年8月17日 声明:部分图文来自互联网公开资料,转载注明出处 一.基本定时器简介 TIM6和TIM7是一个16位向上递增的 ...

  8. STM32定时器捕获编码器模式测速和方向测不准问题

    ** STM32定时器捕获编码器模式测速和方向测不准问题 问题概述 关于STM32编码器模式电机测速的资料网上一抓一大把,却发现真的拿过来用还是有问题的,比如刚刚做了个东西,是个个头比较大的麦克纳姆轮 ...

  9. stm32定时器输出pwmIO口模拟pwm——呼吸灯

    文章目录 前言 一.pwm(脉冲宽度调制) 1.基本原理 2.PWM的优点 3.PWM波的控制方法 二.定时器的相关介绍 1.stm32定时器 2.通用定时器计数模式 3.定时器的基本工作原理 三.定 ...

  10. STM32CubeMX | 使用STM32定时器的PWM输入模式测量脉冲宽度和周期

    STM32CubeMX | 使用STM32定时器的PWM输入模式测量脉冲宽度和周期 目录 STM32CubeMX | 使用STM32定时器的PWM输入模式测量脉冲宽度和周期 1.介绍 2.STM32C ...

最新文章

  1. 效率提升工具Listary
  2. PHP面试之二:高并发与大数据
  3. 如何在Android主屏幕上添加热点快捷方式
  4. python如何输出两行_python pandas dataframe拆分行(某些行一行拆成多行)
  5. linux vim (your system doesn't appear to have the zip pgm)
  6. linux open dev/tty0 receive_buf,书写基于内核的linux键盘纪录器(p9-0e)(3)
  7. python对csv文件中的数据进行分类_python 数据处理 对csv文件进行数据处理
  8. c# winform 全角自动转化半角问题(C#中ImeMode的值):转载
  9. Spring Cloud Sleuth 使用教程
  10. BAT工程师自研存储引擎,火爆Github!!大家速度顶起来
  11. NotePad++常用快捷键。——Arvin
  12. C++ string获取字符串元素:[]和at()
  13. matlab炮灰模型,非诚勿扰的数学分析
  14. 车载网络技术革新-CAN FD浅析
  15. 不动产 - 权属性质代码
  16. vue-devtools 必备开发工具
  17. Linux LCD 驱动调色板原理
  18. Docker深入浅出系列 | 容器初体验
  19. 前端谷歌浏览器基本介绍及前后端分离原理分析
  20. DriverStudio开发PCI设备DMA数据传输

热门文章

  1. FAT学习笔记(四)——Dir Entry
  2. vi/vim查看空格、制表符等特殊符号
  3. 计算机运行但屏幕黑屏,电脑显示器黑屏,教您电脑主机运行正常显示器黑屏怎么办...
  4. C语言中pow()指数函数的使用问题简述
  5. httpwatch使用
  6. 伤害世界服务器修改,伤害世界获取GM权限修改方法讲解
  7. 关键词抓取规则,关键词标题SEO技巧
  8. 2018校招-挂面-H3C-技术支持工程师
  9. [1-5] 把时间当做朋友(李笑来)Chapter 5 【小心所谓成功学】 摘录
  10. 这样是不是就能把系统设计好??