CubeMX使用教程(5)——定时器PWM输出

本篇我们将利用CubeMX产生频率固定、占空比可调的两路PWM信号输出

例如PA6引脚输出100Hz的PWM;PA7引脚输出500Hz的PWM,双路同时输出

我们还是利用上一章定时器中断的工程进行学习,这样比较方便

首先打开CubeMX对PA6PA7进行GPIO配置

 注:之所以不选择带N的,是因为TIM1_BKIN这种带N的定时器通道是用来生成互补PWM的

 

因为PA6配置的是TIM16,按照要求,PA6引脚要输出100Hz的PWM,默认系统时钟频率为80MHz(即80,000,000Hz),

定时频率=定时器工作频率/Counter=默认系统时钟频率/[(PSC+1)*Counter]

为了方便计算,我们把重装载值Counter设为100,目标输出频率(定时频率)为100Hz,因此PSC=8000-1

经过这个分析,我们再填入PSC=8000-1Counter=100-1两个参数

同理分析PA7引脚的参数配置,PA7引脚输出500Hz的PWM,默认系统时钟频率为80MHz(即80,000,000Hz)

定时频率=定时器工作频率/Counter=默认系统时钟频率/[(PSC+1)*Counter]

为了方便计算,我们把重装载值Counter设为100,目标输出频率(定时频率)为500Hz,因此PSC=1600-1

经过这个分析,我们再填入PSC=1600-1Counter=100-1两个参数

配置完成后,即可点击GENERATE CODE生成代码

进入Keil之后,我们可以先看看tim.c里面的内容

可以看到通过在CubeMX中的配置和图形化编程,CubeMX这个工具自动帮我们生成了 时钟配置代码,数值也是我们前面预设的那样 htim16.Init.Prescaler = 8000-1;  htim16.Init.Period = 99;

这就是为什么ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。

接着我们回到main.c的主函数中,打开PWM输出通道

	HAL_TIM_PWM_Start(&htim16,TIM_CHANNEL_1);//打开PWM输出通道
	HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);

这样两个引脚就同时输出不同固定频率的PWM了,PA6引脚输出100Hz的PWM;PA7引脚输出500Hz的PWM。

我们开始编写按键调节占空比的部分

首先定义两个变量PA6_Duty、PA7_Duty,分别指代两个引脚输出脉冲的占空比

unsigned char PA6_Duty=10;
unsigned char PA7_Duty=10;

 在主函数的while(1)中编写按键中断,按下一次按键,占空比增加10%,当占空比到了90%,再按一次就又回到了10%,这里用的就是上一章的按键中断,只不过换了变量而已。

		if(key[0].single_flag==1)
		{
			PA6_Duty+=10;
			if(PA6_Duty>=100) PA6_Duty=10;
			__HAL_TIM_SetCompare(&htim16,TIM_CHANNEL_1,PA6_Duty);
			key[0].single_flag=0;
		}
		if(key[1].single_flag==1)
		{
			PA7_Duty+=10;
			if(PA7_Duty>=100) PA7_Duty=10;
			__HAL_TIM_SetCompare(&htim17,TIM_CHANNEL_1,PA7_Duty);
			key[1].single_flag=0;
		}

除此之外,我们还可以将占空比通过LCD实时显示出来,实现可视化,更加直观。

		char text[30]; 
		sprintf(text,"    PA6_Duty:%d    ",PA6_Duty);
		LCD_DisplayStringLine(Line2, (uint8_t *)text);
		sprintf(text,"    PA7_Duty:%d    ",PA7_Duty);
		LCD_DisplayStringLine(Line4, (uint8_t *)text);

 最终效果

目前手头上没有示波器,要是有示波器把PA7和PA6引脚连上示波器,按下按键可以直观的看到占空比的变化(每按一次按键,占空比增加10%)

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

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

相关文章

Python递归函数你用对了吗?

1.递归函数 递归函数:函数自己调用自己 2.需求 使用函数的方式,计算数字n的阶乘 # 5! """ 5! 1 * 2 * 3 * 4 * 5 4! 1 * 2 * 3 * 4 3! 1 * 2 * 3 2! 1 * 2 1! 1综上可以总结出:n! n * (n - 1) "&qu…

Spring Cloud部署篇2——Docker Compose部署至CentOS云服务器

一、项目介绍 系统模块 com.mingink |--mingink-api // 接口模块 | └──mingink-api-system // 系统接口 |--mingink-common // 通用模块 | └──mingink-common-core // 系统接口 |--mingink-gateway…

Mybatis操作sql报错ibatis.binding.BindingException: Parameter ‘empId‘ not found.

你们好,我是金金金。 场景 在使用Mybatis操作sql语句过程当中,更新操作,报错信息如下:Caused by: org.apache.ibatis.binding.BindingException: Parameter ‘empId’ not found. Available parameters are [arg1, arg0, param1, …

链表中的经典问题——奇偶链表

奇偶链表 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。 请注意,偶数组和奇…

R语言绘制桑基图教程

原文链接:R语言绘制桑基图教程 写在前面 在昨天3月10日,我们在知乎、B站等分享了功能富集桑基气泡图的绘制教程。相关链接:NC|高颜值功能富集桑基气泡图,桑基气泡组合图。 确实,目前这个图在文章中出现的频率相对比较…

仿牛客网项目---Elasticsearch分布式搜索引擎

1.什么是ElasticSearch分布式搜索引擎? Elasticsearch是一个开源的分布式搜索引擎,提供实时的、高可用性的搜索和分析解决方案。它支持快速索引和搜索大规模数据,具有分布式架构、RESTful API、基于JSON的查询语言等功能,适用于各…

手机备忘录可以设置密码吗 能锁屏加密的备忘录

在繁忙的生活中,手机备忘录成了我随身携带的“小秘书”。那些关于工作的灵感、生活的琐事,甚至深藏心底的小秘密,都被我一一记录在里面。然而,每次当手机离开我的视线,或者需要借给他人使用时,我总会心生担…

力扣:118. 杨辉三角

力扣:118. 杨辉三角 描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输…

根据xlsx文件第一列的网址爬虫(selenium)

seleniumXpath 在与该ipynb文件同文件下新增一个111.xlsx,第一列放一堆需要爬虫的同样式网页 然后使用seleniumXpath爬虫 from selenium import webdriver from selenium.webdriver.common.by import By import openpyxl import timedef crawl_data(driver, url)…

数据结构->双向链表带你体验开火车(哨兵)与拼接火车(应用)厢的乐趣

✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:橘橙黄又青-CSDN博客 目的:学习双向带头链表的增,删,查,销毁…

Logseq电脑端+安卓端同步gitee或github

文章目录 0.初衷1.电脑端1.1 新建仓库1.2 克隆项目,生成秘钥1.3 添加图谱,选择文件目录,我是原本就有笔记,所以会如下所示。1.4 下载脚本文件1.5赋权限 (windows可跳过)1.6 修改脚本命令1.7 logseq设置同步…

从大模型到Agentscope——Multi-Agent框架应用与开发

目录 大模型发展历程 大模型的缺陷 智能体 Agent的构建 模型计划内存工具 Agent到多Agent Multi-Agent 带来性能提升的同时也带来一些新的问题 流程设计鲁棒可靠多模态多系统提升运行效率 Multi-Agent框架 AgentScope Demo 三行代码实现聊天机器人 预告

Python与FPGA——sobel边缘检测

文章目录 前言一、sobel边缘检测二、Python sobel边缘检测三、FPGA sobel边缘检测总结 前言 边缘存在于目标、背景区域之间,它是图像分割所依赖的较重要的依据,也是图像匹配的重要特征。边缘检测在图像处理和计算机视觉中,尤其在图像的特征提…

C++进阶之路---多态(二)

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂,年薪百万! 一、多态的原理 1.虚函数表 // 这里常考一道笔试题:sizeof(Base)是多少? class Base { public:…

Vue首屏优化方案

在Vue项目中,引入到工程中的所有js、css文件,编译时都会被打包进vendor.js,浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多,那么vendor.js文件体积将会相当的大,影响首屏的体验。可以看个例子:…

后端八股笔记------微服务篇

注册中心的主要作用:根据服务进行负载均衡,服务的健康监控。 服务雪崩,因为一个服务D的宕机,导致很多服务崩掉。 达到失败阈值----Closed_to_Open 服务降级------某一个接口 服务熔断------整个服务 限流常见的算法可以是令牌…

Upload 上传(图片/文件),回显(图片),下载(文件)

1.前端技术:V3 Ant Design Vue 2.后端技术:Java 图片上传/回显: 文件上传回显: 表结构:单文件/图片上传为A表对文件C表 (A表field字段 对应 C表id字段) 如图:A表中的 vehicle_d…

【测试工具系列】压测用Jmeter还是LoadRunner?还是其他?

说起JMeter,估计很多测试人员都耳熟能详。它小巧、开源,还能支持多种协议的接口和性能测试,所以在测试圈儿里很受欢迎,也是测试人员常用的工具,但是在企业级性能场景下可能会有性能瓶颈,更适合测试自己使用…

基于单片机的视觉导航小车设计

目 录 摘 要 I Abstract II 引 言 1 1 总体方案设计 3 1.1 方案论证 3 1.2 项目总体设计 3 2 项目硬件设计 4 2.1 主控模块设计 4 2.1.1单片机选型 4 2.1.2 STM32F103RCT6芯片 4 2.2单片机最小系统电路 5 2.3电机驱动模块设计 7 2.4红外模块设计 8 2.5红外遥控模块设计 9 2.6超…

一条 SQL 更新语句如何执行的

Server 层 存储引擎层 总流程 查询语句 连接器 查询缓存 分析器 优化器 执行器 更新语句 redo log(节省的是随机写磁盘的 IO 消耗(转成顺序写&#x…