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

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

  • 前言
  • 硬件和软件
  • cubemx新建工程
  • 打开Debug模式
  • 配置时钟源
        • 六大时钟的作用
        • 选择Crystal/Ceramic Resonator,即使用外部晶振作为HSE的时钟源。
  • 配置时钟
  • 配置高级定时器TIM8和通用定时器TIM3
          • 这里大概解释一下配置pwm输出用到的几个参数
          • 我们设置的是:
          • 高级控制和通用定时器通道引脚分布
  • 配置工程路径
          • 选MDK-ARM即keil5
  • 生成工程
  • 主函数调用案例
  • 配置下载器烧录验证
  • 输出结果

前言

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

硬件和软件

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

cubemx新建工程

在这里插入图片描述

打开Debug模式

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

在这里插入图片描述

配置时钟源

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

六大时钟的作用

在这里插入图片描述

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

在这里插入图片描述

配置时钟

照着下面的图配置即可,最高时钟频率240Mhz
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

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

其中分频系数和计数周期较为常用,可用于设置定时器溢出时间,一般来说溢出也代表定时器中断的产生(如果配置了中断)。溢出时间计算公式如下:
在这里插入图片描述

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

在这里插入图片描述

如果我想要产生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

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

在这里插入图片描述

配置工程路径

选MDK-ARM即keil5

在这里插入图片描述
在这里插入图片描述

生成工程

在这里插入图片描述

主函数调用案例

打开main.c
在这里插入图片描述

在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 */

在这里插入图片描述

配置下载器烧录验证

在这里插入图片描述
在这里插入图片描述

输出结果

在这里插入图片描述
在这里插入图片描述
和我们预期的结果一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/40768.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git clone 或者是vscode clone 时遇到the remote end hung up unexpectedly

fatal: the remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed使用git clone总是报错 查看原因有三种可能:要么是缓存不够,要么是网络不行,要么墙的原因。 如果是网络不行,可以配置git的最低速度和最…

postgresql导入导出数据库的一些问题

新建一个数据库 别忘了添加空间数据的扩展 备份之前的数据库 注意一定要自定义表,去掉 spatial_ref_sys ,要不然需要先drop在创建,可能会报错。 一般不会去导函数,如果有个别自己创建的函数可以手动复制一下,全部导的话…

SQL 上升的温度

197 上升的温度 SQL架构 表: Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是这个表的主键 该表包含特定日期的温度信息 编写一个 SQL …

第108天:免杀对抗-Python混淆算法反序列化打包生成器Py2exeNuitka

知识点 #知识点: 1、Python-对执行代码做文章 2、Python-对shellcode做文章 3、Python-对代码打包器做文章#章节点: 编译代码面-ShellCode-混淆 编译代码面-编辑执行器-编写 编译代码面-分离加载器-编写 程序文件面-特征码定位-修改 程序文件面-加壳花指…

《面试1v1》Kafka基础

🍅 作者简介:王哥,CSDN2022博客总榜Top100🏆、博客专家💪 🍅 技术交流:定期更新Java硬核干货,不定期送书活动 🍅 王哥多年工作总结:Java学习路线总结&#xf…

Modbus TCP/BACnet IP/MQTT物联网网关IOT-810介绍及其典型应用

伴随着计算机技术以及互联网的发展,物联网这个概念已经逐渐进入我们的日常生活,例如智能泊车,智能家居,智能照明,智能楼宇等。智能楼宇是将传统的楼宇自控系统与物联网技术相融合,把系统中常见的传感器、设…

kotlin基础

val和var的区别 var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和java中声明变量的方式一样。 val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为…

【Hippo4j监控Web容器Tomcat线程池】

🚀 线程池管理工具-Hippo4j 🚀 🌲 AI工具、AI绘图、AI专栏 🍀 🌲 如果你想学到最前沿、最火爆的技术,赶快加入吧✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者&#…

k8s与集群管理

从docker讲起 终于有人把 Docker 讲清楚了,万字详解! Docker资源(CPU/内存/磁盘IO/GPU)限制与分配指南 默认情况下,Docker容器是没有资源限制的,它会尽可能地使用宿主机能够分配给它的资源。如果不对容器资…

ylb-接口6验证手机号是否注册

总览: 1、service处理 在api模块下service包,创建一个UserService接口:(根据手机号查询数据queryByPhone(String phone)) package com.bjpowernode.api.service;import com.bjpowernode.api.model.User; import co…

如何使用Spring Boot实现分页和排序?

使用Spring Boot实现分页和排序需要借助Spring Data JPA。Spring Data JPA是Spring Data项目中的一个模块,提供了简化数据访问层的功能,包括分页和排序。 接下来我们通过一段Java代码,展示如何使用Spring Data JPA和Spring Boot实现分页和排…

el-progress组件使用,样式修改,自定义文字

正常的el-progress显示是这样的 修改后 自动计算percentage&#xff0c;format自定义显示文字 <template><div><div class"content-view"><div v-for"(item, index) in progressList" class"item-view"><el-prog…

单轴机器人的结构与特点

单轴机器人是由马达驱动的移动平台&#xff0c;由滚珠螺杆和 U型线性滑轨导引构成&#xff0c;其滑座同时为滚珠螺杆的驱动螺帽及线性滑轨的导引滑块&#xff0c;可用半导体、光电、交通运输业、环保节能产业、精密工具机、机械产业、智慧自动化、生技医疗上。 相对于传统的模组…

stable diffusion webui mov2mov

手把手教你用stable diffusion绘画ai插件mov2mov生成动画_哔哩哔哩_bilibili手把手教你用stable diffusion绘画ai插件mov2mov生成动画, 视频播放量 14552、弹幕量 3、点赞数 275、投硬币枚数 114、收藏人数 980、转发人数 75, 视频作者 懂你的冷兮, 作者简介 科技改变世界&…

oc基本控件2

// // ViewController.m // OcDemoTest // // Created by Mac on 2023/7/14. //#import "ViewController.h"interface ViewController () // label property (weak, nonatomic) IBOutlet UIImageView *imageView; // Use of undeclared identifier // 全局propert…

uniapp 土法 瀑布流 - vue3

效果图 代码 <template><view><!-- 瀑布流展示 --><!-- 标签页 --><view class="rowStart flexNoLineBreaking paddingCol10 innerDomPaddingRow5 tinyShadow marginBottom10"><view @click="tabsCurrent = 0; run_waterfa…

DCDC芯片选型

一、BUCK芯片选型 最初MP2307特别好用&#xff0c;是由美国MPS公司推出

transformer 学习

原理学习: (3条消息) The Illustrated Transformer【译】_于建民的博客-CSDN博客 代码学习: https://github.com/jadore801120/attention-is-all-you-need-pytorch/tree/master/transformer mask学习: (3条消息) NLP 中的Mask全解_mask在自然语言处理代表什么_郝伟博士的…

msys2安装与配置: 在windows上使用linux工具链g++和包管理工具pacman C++开发

文章目录 为什么用这个msys2下载、doc安装&#xff0c;很简单初次运行&#xff0c;做些配置更新软件安装与卸载方法安装必要的软件包设置win环境变量在windows terminal中使用在vscode中使用 为什么用这个msys2 方便windows上的C开发demo&#xff0c;不需要VS了方便C开发安装o…

03.MySQL——索引和事务

索引 索引的概念 索引可以提高数据库的性能。不用加内存&#xff0c;不用改程序&#xff0c;不用调sql&#xff0c;只要执行正确的 create index &#xff0c;查询速度就可能提高成百上千倍。但是查询速度的提高以插入、更新、删除的速度为代价。索引的价值在于提高一个海量数…