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

发布者:真诚相伴最新更新时间:2021-01-19 来源: eefocus关键字:STM32F4  TIM  可调频率  占空比 手机看文章 扫描二维码
随时随地手机看文章

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

 

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  可调频率  占空比 引用地址:STM32F4_TIM输出PWM波形(可调频率、占空比)

上一篇:STM32F4_RCC系统时钟配置及描述
下一篇:关于STM32软硬件兼容性相关的知识

推荐阅读最新更新时间:2024-10-29 14:42

STM32F429 >> 19. RTC_实时时钟(Code)
配置及读取日期和时间 此工程没有读取亚秒值。 若想让时钟断电后持续计时,则不要使能RTC_Config() 函数中的后备域访问。 bsp_rtc.h /** ****************************************************************************** * @file bsp_rtc.h * @author Waao * @version V1.0.0 * @date 17-Feb-2019 * @brief This file contains some board support package's definition for t
[单片机]
stm32f0 TIM1实现输出PWM波形
//该程序例程是使用的GDstm32f130的芯片,使用TIM1的通道2和通道3输出波形 int main(void) { u16 led0pwmval=0; u8 dir=1; SystemOn_Init(); InitRFChip(); PWM_TIM1(899,0); //?μ?ê?a48MHZ/(999+1)/(1+99)=24KHZ while (1) { Delay_MS(1); if(dir)led0pwmval+=1; else led0pwmval-=1; if(led0pwmval 800)dir=0; if(led0p
[单片机]
stm32f407的串口使用集合(USART1,USART2,USART3,USART6)
由于项目需要使用多串口,因此基于正点原子探索者开发板的串口例程里的串口不够用,在此基础之上,自己对需要用的几个串口操作做了简要的封装,其中已经实现的串口有串口1,串口2,串口3以及串口六,如果有大神能够帮忙完善,本菜鸟在此先谢过,请多多指教 其中的头文件内容如下: /* * file: usart.h * author: Jeans Oyoung * create on June 23, 2016 */ #include string.h #define USE_USART1 #define USE_USART2 #define USE_USART3 #define USE_USART4 #define USE_U
[单片机]
STM32f4按键输入实验代码(02)
接下来我们看看头文件 key.h 里面的代码: #ifndef __KEY_H #define __KEY_H #include sys.h #define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4) //PE4 #define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3) //PE3 #define KEY2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2) //PE2 #define WK_UP GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
[单片机]
正点原子STM32F4笔记 串口使用
1、初始化 时钟 串口时钟,引脚时钟 RCC- AHB1ENR|=1 0; //使能PORTA口时钟 RCC- APB2ENR|=1 4; //使能串口1时钟 引脚复用初始化 GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出 GPIO_AF_Set(GPIOA,9,7); //PA9,AF7 GPIO_AF_Set(GPIOA,10,7);//PA10,AF7 波特率设置 //波特率设置 USART1- BRR=mantissa;
[单片机]
正点原子<font color='red'>STM32F4</font>笔记 串口使用
STM32F429 LTDC驱动RGB屏幕
429有很多特点,支持SDRAM, LTDC, TouchGFX等,手上正好有几块RGB屏幕,加之TouchGFX至少需要LTDC或是DSI的方式驱动(并口和FSMC方式还不可行),所以一定要试试LTDC。 CubeMX配置,按照屏幕的类型选择是18位还是24位的接口类型,值得注意的是如果你选的是18位的接口,颜色是通过R ,G ,B 这几个引脚连接的而不是 , 因此还费了一块转接板。。。 水平和垂直同步的相关数值可以查屏幕的手册,或者驱动IC的手册得到。极性需要注意,前两个一般都是ActiveLow后面的两个自己如果发现现实不正确可以试试改变极性,也发生过几次因为这个极性的问题没有显示的问题。 首层的透明度记得选25
[单片机]
<font color='red'>STM32F4</font>29 LTDC驱动RGB屏幕
stm32f407之基本定时器TIM6&TIM7(操作寄存器)
基本定时器TIM6和TIM7包括一个由可编程分频器驱动的16位自动重载计数器。它可以用作普通的定时器,也可以用来驱动DAC。这两个定时器是完全独立的,不共享任何资源。更多时候是与DAC平配合使用。 作为定时器的配置步骤: 1. 设置中断优先级分组(如果之前没有设置),这个最好一个程序里只在开头设置一次。 2. 使能相关时钟。 3. 设置分频。 4. 清空计数器的值。 5. 设置自动重装寄存器的值。 6. 是否允许中断。 7. 如果允许中断,设置中断优先级,使能中断。 8. 使能计数器。 程序: /**************************
[单片机]
STM32F429之UART使用
#if 1 /// 重定向c库函数printf到USART1 int fputc(int ch, FILE *f) { /* 发送一个字节数据到USART1 */ USART_SendData(USART1, (uint8_t) ch); /* 等待发送完毿*/ while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); return (ch); } /// 重定向c库函数scanf到USART1 int fgetc(FILE *f) { /* 等待串口1输入数据 */ while (
[单片机]
<font color='red'>STM32F4</font>29之UART使用
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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