STM32使用高级定时器输出互补pwm波

这篇具有很好参考价值的文章主要介绍了STM32使用高级定时器输出互补pwm波。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近做的一个项目用到stm32,网上查了很多资料,也踩了很多坑,这里记录一下配置的步骤和说明

硬件和软件

  1. 硬件使用的是stm32h750vbt6;
  2. 软件用到了stm32cubemx和keil5;

cubemx新建工程

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

打开Debug模式

打开Debug模式方便调试,可以忽略,不影响代码运行

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

配置时钟源

在用cube配置时钟源时,有下面三个选项
Disable(禁用)
BYPASS Clock Source(旁路时钟源)
Crystal/Ceramic Resonator(晶体/陶瓷晶振)

六大时钟的作用

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

选择Crystal/Ceramic Resonator,即使用外部晶振作为HSE的时钟源。

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

配置时钟

照着下面的图配置即可,最高时钟频率240Mhz
STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

配置高级定时器TIM8和通用定时器TIM3

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机
STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机
STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

这里大概解释一下配置pwm输出用到的几个参数

Prescaler 分频系数
Counter Mode 计数模式(分为向上和向下)
Count Period 计数周期
Interal Clock Division 内部时钟分频
auto-reload preload 自动重装载
TRGO Event Selection 触发事件

Pulse 简单的理解为占空比,设置为Count Period 计数周期的一半即可输出占空比50%的方波

其中分频系数和计数周期较为常用,可用于设置定时器溢出时间,一般来说溢出也代表定时器中断的产生(如果配置了中断)。溢出时间计算公式如下:
STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

上面那个公式中arr为Count Period的设置数值,psc为Prescaler的设置数值。
Tclk为定时器挂载的时钟线的频率。对于STM32H750而言最高为240Mhz(根据自己的设置有关),不记得可以看看自己配置的时钟树。
由下图可知TIM3挂在APB1上,TIM8挂在APB2上,我们刚刚配置的时钟的TO APB1 Timer clocksClocks和TO APB2 Timer clocksClocks都是240Mhz。

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

如果我想要产生100HZ方波,那么需要配置溢出时间为10ms(100HZ的周期为10ms)。

则可以选择配置psc为2399,arr为999
那么溢出时间公式为:
2400*1000/240(us)=10ms
按照上述计算结果进行配置,其他参数不用改即可

或者另一种算法:
(240*10^6 Hz)/ (2399+1) / (999+1) = 100Hz

我们设置的是:

TIM3:(240 10^3 KHz) / 20 / 100 = 120KHz
TIM8:(240
10^6 Hz)/ (24000) / (10000) = 1Hz

高级控制和通用定时器通道引脚分布

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

配置工程路径

选MDK-ARM即keil5

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机
STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

生成工程

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

主函数调用案例

打开main.c
STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

在main函数中添加如下代码

  /* USER CODE BEGIN 2 */
	
	/* 定时器3通道1输出PWM */
	HAL_TIM_PWM_Start_IT(&htim3,TIM_CHANNEL_1);
	//占空比百分之50
	__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,12000);
	
		/* 定时器8通道1输出PWM */
	HAL_TIM_PWM_Start_IT(&htim8,TIM_CHANNEL_1);
	/* 定时器8通道1互补输出PWM */
	HAL_TIMEx_PWMN_Start(&htim8, TIM_CHANNEL_1);
	//占空比百分之50
	__HAL_TIM_SET_COMPARE(&htim8,TIM_CHANNEL_1,50);


  /* USER CODE END 2 */

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

配置下载器烧录验证

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机
STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机

输出结果

STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机
STM32使用高级定时器输出互补pwm波,STM32,stm32,嵌入式硬件,单片机
和我们预期的结果一致文章来源地址https://www.toymoban.com/news/detail-604812.html

到了这里,关于STM32使用高级定时器输出互补pwm波的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包