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波形(可调频率、占空比)
推荐阅读最新更新时间:2024-11-17 02:17
stm32 学习 (设置TIM4输出4路 pwm J-LINK仿真验证)
使用单片机:stm32f103c8t6 资源 RAM: 20K; flash: 64K;CPU频率: 72M;通用I/O: 32个;UART: 3个;SPI:2个;USB:1个;CAN: 1个;IIC: 2个 12 位同步 ADC: 2 组 10 通道 ; 工作电压: 2.0 至 3.6V 原理图: PWM输出过程: 1. 脉冲计数器 TIMx_CNT 为向上计数。 2. 重载计数器 TIMx_ARR 配置为N。(TIM_Period值) 3. TIMx_CNT的当前计数值 X 在TIMxCLK时钟源驱动下不断累加; 脉冲计数器 TIMx_CNT 数值 X 大于 重载计数器 TIMx_ARR
[单片机]
STM32F429之LTDC驱动图解
本文基于ST官方demo板STM32F429 Discovery硬件平台,以看图说话的形式给大家讲解LTDC的主要参数配置。关于本文提到的代码部分均摘自本人另一片文章《 STM32F429之LTDC代码模板 》,LCD硬件为240x320,驱动IC为ili9341。本文目的意在让大家通过几张图就能掌握STM32F429 LTDC控制器的配置要领,而从干涩的文字中解脱出来,方便记忆。当然本文只是讲解了LTDC一些常用的设置,关于更多细节的操作还是得参照ST的官方datasheet。 一、关于LTDC外设的时钟配置,只需要记住下面这张图就可以了(图片来源于STM32CubeMX RCC时钟树): 该图所对应的代码如下: /*
[单片机]
STM32F4的CCM内存之一
我们知道STM32F4当中有个CCM内存,如图所示,这个内存是挂在D总线上直接和内核相连,因此除了内核之外谁都不能访问,那么我们怎么将其利用起来呢? 首先,我们可以使用Keil的设置选项,将IRAM2打勾,让编译器选择什么时候使用这个内存。显然,我们还可以将这两个地址修改一下,将IRAM1改为0x10000000,这样,编译器就会优先分配CCM内存。 我们来看看结果,在MAP文件中,表明确实使用了这段内存,但是因为我们使用的内存较少, 还没有用到CCM。 这种自动分配的方式有什么问题呢?这段内存是内核专有的,除了内核任何其它总线都不能访问,这就意味着,一旦编译器将数据分配到CCM中,而同时使用了DMA
[单片机]
幅度、频率和相位可调的双通道DDS 信号发生器
DDS 基本原理 DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有相对带宽大,频率转换时间短、分辨率高和相位连续性好等优点,广泛应用于通信领域。DDS 的基本结构图如图所示。 图1 DDS基本结构图 其中相位累加器由 N 位加法器与N 位寄存器构成。每来一个时钟,加法器就将频率控制字与累加寄存器输出的相位数据相加,相加的结果又反馈至累加寄存器的数据输入端,以使加法器在下一个时钟脉冲的作用下继续与频率控制字相加。用相位累加器输出的数据,作为波形存储器的相位采样地址,这样就可以把存储在波形存储器里的波形采样值经查表找出,完成相位到幅度的转换。由 D/A 转换器将数字信号
[测试测量]
基于DDS的超声波电机测试电源设计
超声波电机(USM)具有能够直接输出低转速大力矩,瞬态响应快(可达ms量级)、定位精度高(可达nm量级),无电磁干扰等诸多优点。USM的运行需要有两路具有一定幅值,相位上正交(或可调),频率在20 kHz以上的高频交流电源。驱动信号源的幅值、频率及相位直接影响USM的性能。为便于USM的性能测试及研究,需要提供一种在幅值、频率、相位上均可调的测试电源。以往的超声波驱动器多采用分立器件构成如文献,其电路结构复杂。文献虽然改用FPGA或CPLD生成,但所生成的信号频率变化是不连续的。文献是用单片机和专用的DDS芯片,存在抗干扰性差,可靠性低的弊端。
本文介绍了基于DLL数字频率直接合成技术(DDS)用ALTERA公司的FP
[电源管理]
关于如何单独失能STM32 TIM通道的方法
最近一个项目涉及到了六路PWM的产生,这里就不说这个了,如果有不会的可以参考我的另外一篇博客。这里说一下如何单独的关闭与开启定时器的一路通道,参考了很多网友走过来的历程,这里引用他们的例子,特说明,目的为了大家更好的学习,希望他们理解。 网友以前遇到问题: TIM2的4个通道想分别用在不同的事件处理中,但是似乎只有TIM_Cmd()这函数可以用,就是把所有通道同时开启或关闭, 而想用TIM_CCxCmd()来分别操作各个通道则完全不起作用。 比如说TIM_Cmd(TIM2, ENABLE); 了之后,再TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Disable);就没办法关闭这个通道,还是会不
[单片机]
STM32F429之使用FPU和DSP
CMSIS的DSP库提供了一类高级数学处理功能,包括: Basic math functions Fast math functions Complex math functions Filters Matrix functions Transforms Motor control functions Statistical functions Support functions Interpolation functions 该库使用不同的函数来处理8位、16位和32位整型以及32位浮点型数据。 STM32F429具有浮点处理器(FPU),在开启FPU的情况下,浮点数运算性能大大提高,配以DSP库的
[单片机]
STM32F407用USART2与HC06蓝牙模块通信
笔者曾经使用STM32F103做过些小东西,想着迁移到F407应该很容易,未曾想事情并不简单,有很多坑被我踩到了。本文主要讲述利用建立STM32F407的USART2与HC06蓝牙模块进行通信。本文写的尽量详细简单,让初学ARM的新手也能看懂,同时也涉及到一些容易出错的细节,供大家参考和指正。 本文主要分下面几块来写: STM32F407用USART2与HC06蓝牙模块通信 串口通信原理 HC06蓝牙模块 STM32F407的USART2配置 串口通信原理 想必玩过一点单片机的人都懂一点串口通信,而恐怕我们印象中的串口通信不过如此,两个芯片通过串口通信,需要共地、Tx(发送)和Rx(接收)相互连接即可
[单片机]