STM32 Cubemx 输出可调频率与占空比的PWM
这里就不对STM32的PWM进行讲解了,想要了解的可以百度一下,这里主要说怎么实现。
1、建立工程,我选的是STM32F103zet6芯片,选择定时器的PWM功能

2、配置时钟,我这里配的是内部时钟,没有配外部时钟,而且不是最大时钟,有需要的可以自己改

3、配置定时器,这里的话默认就可以,因为代码里面需要对配置的初始化代码进行修改的,而修改后才可以实现该功能

4、生成代码后,修改代码,找到PWM初始化函数,修改为如下代码,注意要把初始化函数前面的 static 关键字也去掉,而且函数声明也要跟着修改
void MX_TIM4_Init(uint16_t pre,uint16_t pul) //修改初始化函数,改变频率与PWM
{
//占空比=Pulse/Period;频率:f=48M/pre/per TIM_MasterConfigTypeDef sMasterConfig;
TIM_OC_InitTypeDef sConfigOC; htim4.Instance = TIM4;
htim4.Init.Prescaler =pre; //分频(关键)
htim4.Init.Period = -;//计数周期 (关键,若100的计数周期对于一些频率跟占空比误差大的话,可以自己计算更改调试计数周期大小)
htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim4) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
} sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = pul;//脉冲计数(关键)
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
} HAL_TIM_MspPostInit(&htim4); }
5、接着在自己需要的代码里插入,PWM开始停止函数就可以啦
HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); //PWM开启函数
MX_TIM4_Init(uint16_t pre,uint16_t pul); //改变参数就可实现改变占空比跟频率的目的了
HAL_TIM_PWM_Stop(&htim4, TIM_CHANNEL_1);//停止PWM
这里我说一下核心部分:占空比 = (Pulse/Period)*100%;频率: f = 48M/Prescaler/Period;影响PWM占空比跟频率的参数这主要是 Pulse、Prescaler、Period 这3个;频率跟占空比都与Period(计数周期)有关,只要我们把计数周期定下来,修改Prescaler、跟Pulse这两个值,就可以直接修改PWM的频率跟占空比了。具体要多少的占空比跟频率,就自己计算一下就可以了。举个例子说明一下:这里Period设为100,如果我要设定一个频率为1500Hz、占空比5%的PWM波,只需要传入参数Pulse=5(占空比 = Pulse / Period * 100% =(5/100) * 100%=5%)、Prescaler=320(f = 系统频率 / 分频 / 计数周期 = 48M/320/100 = 1500Hz)即可,逻辑分析仪采集结果如下图:

补充一点:如果频率要求快,而且精度要求高的,就选用晶振大的 STM32 系列,晶振大误差就小,这里如果定好占空比的话,只调频率可以调到很准确,或者定好频率调占空比也是一样,如果要同时改变频率跟占空比,频率高了就会有误差了,所以选用大晶振可以减小点误差。
附一个我自己算出来的频率占空比表(已全部用示波器调试验证):

STM32 Cubemx 输出可调频率与占空比的PWM的更多相关文章
- STM32F4_TIM输出PWM波形(可调频率、占空比)
Ⅰ.概述 上一篇文章关于STM32基本的计数原理明白之后,该文章是在其基础上进行拓展,讲述关于STM32比较输出的功能,以输出PWM波形为实例来讲述. 提供实例工程中比较实用的函数:只需要调用该函数, ...
- 基于STM32F030F4P9和STM32 CUBEMX 输出PWM波形
STM32F030F4P9定时器功能比较丰富,在此记录项目中使用其自动输出PWM波形(频率:50HZ).CubeMX配置定时器如下图说明. 在此定时器基础时钟为48MHZ,配置中不做分频处理,预分频系 ...
- STM32 精确输出PWM脉冲数控制电机(转)
STM32 精确输出PWM脉冲数控制电机 发脉冲两种目的1)速度控制2)位置控制 速度控制目的和模拟量一样,没有什么需要关注的地方发送脉冲方式为PWM,速率稳定而且资源占用少 stm32位置控制需要获 ...
- STM32—TIMx输出PWM信号驱动MG996R舵机
文章目录 一.前言 二.MG996R舵机简介 三.TIM定时器简介 四.通用定时器TIMx 1.TIMx主要功能 2.TIMx框图 3.计数单元 4.时钟选择 5.输出比较PWM 五.TIM3输出双路 ...
- STM32 CubeMx使用教程
一.STM32CubeMX 简介 STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以 ...
- stm32定时器输出移相PWM(非主从模式)
背景:由于项目需要,需要stm32输出任意相角度的PWM 前提知识: 1.stm32定时器的Tim,一般有多个OC.具体差别根据型号来定. 2.定时器的使能,理论上是多个通道同时使能 3.TIM_OC ...
- 【转】STM32定时器输出比较模式中的疑惑
OCx与OCxREF和CCxP之间的关系 初学STM32,我这个地方卡了很久,现在终于有些明白了,现在把我的理解写下与大家共享,如果有不对的地方,还请指出. OCxREF就是一个参考信号,并且约定: ...
- STM32学习日志--使用DMA功能自动更新PWM的输出
/******************************************************************************* 编译环境: EWARM V5.30 硬 ...
- (stm32f103学习总结)—stm32 PMW输出实验
一.PWM简介 PWM是 Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调 制,简称脉宽调制.它是利用微处理器的数字输出来对模拟电路进行控 制的一种非常有效的技术,其控制简 ...
随机推荐
- AlertDialog自己定义View的使用方法+怎样改变弹出框的大小
android系统定义了弹出框,支持我们自己定义布局: public AlertDialog getEditCustomDialog() { LayoutInflater inflater = get ...
- 2015.04.23,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 33
1.eat, drink, and be merry 拉丁动词vivo(to live),加上名词vita(life),是许多重要英文词汇的来源. convivo是拉丁动词to live togeth ...
- bzoj3715: [PA2014]Lustra(乱搞)
3715: [PA2014]Lustra 题目:传送门 题解: 随手一发水题x1 随便排序一下...小学生题??? 代码: #include<cstdio> #include<cst ...
- 转:Java修改Excel单元格的数据及格式
https://blog.csdn.net/aking21alinjuju/article/details/6001153?locationNum=2 继前两节的Java读取.写入Excel后,本期将 ...
- Linux性能优化和监控系列(一)——top工具
解释服务器发生了什么——top工具 在检查服务器的详细工作性能状态前,系统管理员需要对当前服务器状态有总体的了解. top是检查服务器总体状态的强有力工具, 通过top可以获取CPU, Memory, ...
- 编译最新版webrtc源码和编译好的整个项目10多个G【分享】
编译最新版webrtc源码和编译好的整个项目10多个G[分享] 参考https://webrtc.org/native-code/development/编译最新版webrtc源码: Git clon ...
- Centos下MongoDB数据库的安装以及配置开机自启动(三)
最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. 在服务器上完全可以用yum来安装管 ...
- Java环境安装配置好了却不能运行xxx.jar程序?
1,检查Java环境是否已安装或配置成功. WIN+R → cmd → java -version,查看是否可以读取到Java版本信息,如果读取不到,说明Java环境安装或配置有问题,重新装一下. 2 ...
- week5_notebooke1
大纲: 01 装饰器进阶 02 函数的有效信息 03 可迭代对象.迭代器 04 生成器 列表生成式 生成器表达式 05 内置函数 06 二分查找 01 装饰器进阶 #多个装饰器装饰同一个函数: ## ...
- 洛谷P4014 分配问题(费用流)
题目描述 有 nn 件工作要分配给 nn 个人做.第 ii 个人做第 jj 件工作产生的效益为 c_{ij}cij .试设计一个将 nn 件工作分配给 nn 个人做的分配方案,使产生的总效益最大. ...