STM32F4_TIM输出PWM波形 (可调频率、占空比)

发布者:自由思想最新更新时间:2024-09-19 来源: elecfans关键字:STM32F4  TIM输出  PWM波形  可调频率  占空比 手机看文章 扫描二维码
随时随地手机看文章

Ⅰ、概述

上一篇文章关于STM32基本的计数原理明白之后,该文章是在其基础上进行拓展,讲述关于STM32比较输出的功能,以输出PWM波形为实例来讲述。


提供实例工程中比较实用的函数:只需要调用该函数,参数为频率和占空比

void TIM2_CH2_PWM(uint32_tFreq, uint16_tDutycycle);

先看一下实例中1KHz、20%占空比波形图 TIM2_CH2_PWM(1000, 20);


关于本文的更多详情请往下看。

Ⅱ、实例工程下载

笔者针对于初学者提供的例程都是去掉了许多不必要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供大家学习。

笔者提供的实例工程都是在板子上经过多次测试并没有问题才上传至360云盘,欢迎下载测试、参照学习。

提供下载的软件工程是STM32F417的,但F4其他型号也适用(适用F4其他型号:关注微信,回复“修改型号”)。

STM32F4_TIM输出PWM波形(可调频率、占空比)实例:

https://yunpan.cn/cBYTWTgSmhbfe 访问密码 0025

STM32F4资料:

https://yunpan.cn/cR2pxqF5x2d9c 访问密码 53e7

Ⅲ、原理描述


上一篇文章讲述的就是上图中“计数”红色部分,也就是开始到结束的时间,该文章是讲述在这个计数的中间加一个值(比较值),当计数到这个比较值的时候就对输出的引脚进行反向,直到计满(一个周期)。循环下去。

通用TIM框图:


上面两图截取“STM32F4x5、x7参考手册”建议下载手册参看。

我上面说的“比较值”就是TIM框图中比较部分的“Capture/Comparex register”比较寄存器,这个值就会决定输出引脚的电平

Ⅳ、源代码分析

笔者以F4标准外设库(同时也建议初学者使用官方的标准外设库)为建立的工程,主要以库的方式来讲述。

1.RCC时钟


该函数位于bsp.c文件下面;

重点注意:

A.外设RCC时钟的配置要在其外设初始化的前面;

B.匹配对应时钟。

比如:RCC_APB2外设不要配置在RCC_APB1时钟里面

【如:RCC_APB1PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);这样能编译通过,但这是错误的代码】

2.TIM比较输出配置


该函数位于timer.c文件下面;

TIM2时基单元配置是上一篇文章相关的内容,是及时的配置,在该文中也就是对一个周期的配置。

TIM2通道2:PWM1模式配置是对占空比的配置。

tim2_period =TIM2_COUNTER_CLOCK/Freq - 1;

tim2_pulse = (tim2_period + 1)*Dutycycle / 100;

函数开始是对周期和占空比的一个换算公式,也比较简单。

决定输出频率和占空比主要由这三个参数(TIM2_PRESCALER_VALUE、tim2_period、tim2_pulse)决定的。

以今天工程输出1KHz,20%来举例说明:

TIM2_PRESCALER_VALUE = 168M/2 / 42M - 1 = 1 (也就是2分频)

tim2_period = 42000 - 1

tim2_pulse = 8400

频率1KHz = 42M/ 4200

占空比20% = 8400/42000

Ⅴ、说明

关于笔者提供的软件工程实例,可关注微信,在会话框回复“关于工程”,有关于工程结构描述、型号修改等讲述。


关键字:STM32F4  TIM输出  PWM波形  可调频率  占空比 引用地址:STM32F4_TIM输出PWM波形 (可调频率、占空比)

上一篇:STM32F10x_ 模拟I2C读写EEPROM
下一篇:Linux下开发STM32 使用gcc-arm-none-eabi工具链编译生成bin、hex文件

推荐阅读最新更新时间:2024-11-12 18:00

关于STM32 定时器 PWM 实时调节占空比时,预装载特性
最近在调试项目的时候遇到一个奇怪的现象:在调试状态下,给定时器捕获比较寄存器赋不同值,能产生不同占空比的波形(图1)。反映到器件上也有不同的电压显示,但是在设备运行的时候,就不行了(图2)。 图1 图2 纠结了N天后,也没有办法解决,只好乖乖的看STM32 控制器手册找找看了,结果还真找到了。 从图中可以看到,如果使能预装载特性,则数据会立即写入寄存器中,如果没有使能,那就得等到有事件(?)发生了。这我就明白了,在调试状态下,给寄存器赋值,不会产生什么影响,因为人的反应速度很慢,但是在运行的时候,占空比是实时发生改变的,这样就不能及时写入到捕获比较寄存器中,输出就不会改变了。所以在配置定时器输出PWM的时候,还
[单片机]
关于STM32 定时器 <font color='red'>PWM</font> 实时调节<font color='red'>占空比</font>时,预装载特性
测试STM32F4 EVNETOUT
看到很多管脚都可以配置成EVENTOUT,刚好有个管脚要想要输出一个高电平脉冲,测试了一下: 环境:STM32F407, IAR 7.4, STM32CubeF4 GPIO配置代码: GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLDOWN; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = GPIO_AF15_EVENTOUT; HAL_GPIO_Init(GPIOB
[单片机]
测试<font color='red'>STM32F4</font> EVNETOUT
STM32学习笔记-PWM波形输出
调试芯片:STM32F103C8T6 外部晶振:8MHz 功能介绍:使用Timer3实现两路(可四路)PWM波形的输出 代码如下: 初始化:系统时钟初始化,GPIO端口初始化,Timer初始化 系统时钟初始化: /* 配置系统时钟为72M */ SystemInit(); GPIO端口初始化: /**************************************************************** * 函数名:void GPIO_Config(void) * 描述 :配置复用输出PWM时用到的I/O * 输入 :无 * 输出 :无 * 调用 :main
[单片机]
基于STM32F411的cm级超声波测距系统
本项目通过HC-SR04超声波传感器和STM32F411开发板,以精确到cm的精度测量目标物体的距离。 STM32F411RE开发板 x1 HC-SR04超声波传感器 x1 跳线 若干 其中,HC-SR04超声波传感器可以0.3cm精度读取2-400cm范围距离,而且超声波发射器和接收器组合在一起,适合大多数个人爱好项目。主要性能包括: 工作电源:5VDC 工作电流:15mA 工作频率:40KHz 最大距离:4m 最小距离:2cm 测量角度:15度 分辨率:0.3cm 触发输入信号:10uS TTL脉冲 回升输出信号:TTL脉冲,与测量成距离成正比 当传感器接收到一个触发信号,就发出一个40KHz突发信号
[单片机]
基于<font color='red'>STM32F4</font>11的cm级超声波测距系统
Stm32f407DISCOVEY学习uart串口波特率乱总结
这几天调试Stm32f407DISCOVEY。由于没有串口现成的库函数例程,就用的神州王开发板上的例程直接调,结果串口输出老是乱,115200波特率;;试着把它换到 38400居然可以打印,相差3倍多;真相只有一个,进过调试摸索百度,终于找到原因; .时钟频率不对 由于时钟频率是在库文件里自动定义好的,一开始没有发现,但是波特率一直不对,后来发现问题在库文件里定义的外部晶振是25M,而DISCOVERY的板子上用的是8M的晶振,故产生的主频不对,需要改两个地方,①所以在 stm32f4xx.h中改 #if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)8000000) /*!
[单片机]
基于msp430G2553的低频方波频率占空比、峰峰值测量函数
使用的平台是TI公司的launch pad,频率和占空比已经实现,峰峰值还有有待改进 1、主函数部分: /********************************************* * _ooOoo_ * * o8888888o * * 88 . 88 * * (| -_- |) * * O = /O * * ____/`---'____ * * .' \| |// `. * *
[单片机]
STM32F407-SPI通信接口
1.SPI概念 SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 SPI接口一般使用4条线通信: MISO 主设备数据输入,从设备数据输出。 MOSI 主设备数据输出,从设备数据输入。 SCLK时钟信号,由主设备产生。 CS从设备片选信号,由主设备控制。 主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。 串行移位寄存器通过MOSI信号线将字节传送给从机,从机也将自己的串行移位寄存器中的内
[单片机]
<font color='red'>STM32F4</font>07-SPI通信接口
STM32F407ZGT6使用Systic定时器实现延时
预备知识 STM32F4的系统滴答计时器的介绍及其说明。时间有限,这里点到为止,详情自行百度。 延时的原理: 因为在 ucos 下 systick 不能再被随意更改,如果我们还想利用 systick 来做 delay_us 或者 delay_ms 的延时,就必须想点办法了,这里我们利用的是时钟摘取法。 ---这里摘自正点原子探索者F4,详细原理请自行百度。 实验目标 使用Systic计时器实现精准延时,且不占用OS中断 延时系统具有通用性,可适用多种系统频率 重点分析 本程序流程如下: 初始化其
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved