STM32定时器产生指定个数脉冲
在步进电机控制时,经常会遇到需要输出指定个数的脉冲来实现精确控制。本篇文章将介绍怎样使用定时器输出指定个数的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定时器产生指定个数脉冲相关推荐
- STM32F407-高级定时器输出指定个数PWM功能
高级定时器输出指定个数PWM只需要设置好重复计数器寄存器RCR的值并打开更新中断即可. 一般情况下的更新中断是在CNT计数到ARR的时候产生,而在设置了RCR后,更新中断将会延迟,比如设置RCR的值为 ...
- cube 设置滴答定时器_CubeMX配置定时器产生指定个数的脉冲
1.配置定时器PWM输出 2.配置定时参数并开启中断 3.生成工程并定义一个全局变量来保存要发送脉冲的个数 uint8_t PWMnum; 4.使用库函数封装一个设置脉冲个数并开启PWM输出的函数 v ...
- STM32的单脉冲模式实现精确个数脉冲
我们在做嵌入式产品的开发过程中,有时需要输出指定数目的脉冲.实现它的方法较多,这里介绍一种利用 STM32定时器的单脉冲模式来实现的方法. STM32定时器的单脉冲输出功能,其实是定时器输出比较功能的 ...
- STM32定时器单脉冲输出模式
本文整理于 https://www.sohu.com/a/292903672_807475 原文作者:茶话MCU STM32定时器单脉冲输出模式 单脉冲输出模式是定时器比较输出应用中的一种特殊情况或者 ...
- STM32 - 定时器基础应用说明 - 04 - N-pulse waveform generation using one-pulse mode - 用OPM模式产生N次脉冲
前言:N-PULSE模式,就是PLUS模式+Mask(利用UDIS的屏蔽) Repetition的特性: 那么首先-N-PULSE可以定制波形的各个方面,然后,将这个定制进行重复,那不就是可以无限的定 ...
- STM32定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量
STM32 定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量 文章目录 STM32 定时器间的同步 主TIM1产生PWM 从TIM4精确控制TIM1 PWM脉冲数量 编 ...
- STM32定时器-基本定时器
STM32定时器-基本定时器 实验芯片:STM32F103 更新日期:2021年8月17日 声明:部分图文来自互联网公开资料,转载注明出处 一.基本定时器简介 TIM6和TIM7是一个16位向上递增的 ...
- STM32定时器捕获编码器模式测速和方向测不准问题
** STM32定时器捕获编码器模式测速和方向测不准问题 问题概述 关于STM32编码器模式电机测速的资料网上一抓一大把,却发现真的拿过来用还是有问题的,比如刚刚做了个东西,是个个头比较大的麦克纳姆轮 ...
- stm32定时器输出pwmIO口模拟pwm——呼吸灯
文章目录 前言 一.pwm(脉冲宽度调制) 1.基本原理 2.PWM的优点 3.PWM波的控制方法 二.定时器的相关介绍 1.stm32定时器 2.通用定时器计数模式 3.定时器的基本工作原理 三.定 ...
- STM32CubeMX | 使用STM32定时器的PWM输入模式测量脉冲宽度和周期
STM32CubeMX | 使用STM32定时器的PWM输入模式测量脉冲宽度和周期 目录 STM32CubeMX | 使用STM32定时器的PWM输入模式测量脉冲宽度和周期 1.介绍 2.STM32C ...
最新文章
- 效率提升工具Listary
- PHP面试之二:高并发与大数据
- 如何在Android主屏幕上添加热点快捷方式
- python如何输出两行_python pandas dataframe拆分行(某些行一行拆成多行)
- linux vim (your system doesn't appear to have the zip pgm)
- linux open dev/tty0 receive_buf,书写基于内核的linux键盘纪录器(p9-0e)(3)
- python对csv文件中的数据进行分类_python 数据处理 对csv文件进行数据处理
- c# winform 全角自动转化半角问题(C#中ImeMode的值):转载
- Spring Cloud Sleuth 使用教程
- BAT工程师自研存储引擎,火爆Github!!大家速度顶起来
- NotePad++常用快捷键。——Arvin
- C++ string获取字符串元素:[]和at()
- matlab炮灰模型,非诚勿扰的数学分析
- 车载网络技术革新-CAN FD浅析
- 不动产 - 权属性质代码
- vue-devtools 必备开发工具
- Linux LCD 驱动调色板原理
- Docker深入浅出系列 | 容器初体验
- 前端谷歌浏览器基本介绍及前后端分离原理分析
- DriverStudio开发PCI设备DMA数据传输
热门文章
- FAT学习笔记(四)——Dir Entry
- vi/vim查看空格、制表符等特殊符号
- 计算机运行但屏幕黑屏,电脑显示器黑屏,教您电脑主机运行正常显示器黑屏怎么办...
- C语言中pow()指数函数的使用问题简述
- httpwatch使用
- 伤害世界服务器修改,伤害世界获取GM权限修改方法讲解
- 关键词抓取规则,关键词标题SEO技巧
- 2018校招-挂面-H3C-技术支持工程师
- [1-5] 把时间当做朋友(李笑来)Chapter 5 【小心所谓成功学】 摘录
- 这样是不是就能把系统设计好??