【STM32 定时器(二)TIM 输入捕获PWM 总结】

STM32定时器之输入捕获总结

  • OC介绍
  • PWM介绍
  • PWM初始化代码部分
    • 开启时钟配置
    • 时基单元配置
    • CCR配置
    • GPIO配置
      • 复用和重定义功能
    • 开启定时器
    • 代码实现 :实现呼吸灯

OC介绍

在这里插入图片描述

PWM介绍

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

PWM参数计算
在这里插入图片描述
分辨率越细,分的分量越精细,越稳定,假如它为1%,则它可使得风扇以1为单位的等级调速。可以从1调到100档位,假如它为50%,那么只有两个档位。50和 100。

计算 :如果我现在想要生成一个 PWM频率为1KHZ,占空比可以为任意,PWM分辨率为1%,则PSC(分频器系数),ARR(重装值)应改为多少呢?

Reso分辨率=1%=1/100 ,又因为Reso=1/ARR+1 故而ARR=100-1=99。

PWM频率=1k=1000 = CK_PSC / (PSC+1)* (ARR + 1)

``由于CK_PSC在上篇文章中已经介绍,为72MHz。 故而

式子 CK_PSC / (PSC+1)* (ARR + 1)=PWM频率
变为 72000000 / (PSC + 1) *(99 + 1)=1000,故而PSC=720 -1

PWM初始化代码部分

挨个配置 打通这条路即可
在这里插入图片描述

开启时钟配置

	//通用定时器TIM2时钟开启RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启GPIO的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//内部时钟配置(方便)TIM_InternalClockConfig(TIM2);

时基单元配置

	//配置时基单元TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数的模式TIM_TimeBaseInitStructure.TIM_Period=100 -1;//重装值ARR,根据上面公式计算TIM_TimeBaseInitStructure.TIM_Prescaler=720 -1;//psc 根据上面公式计算TIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);

CCR配置

	//配置CCRTIM_OCInitTypeDef TIM_OCInitStructure;TIM_OCStructInit(&TIM_OCInitStructure);//给所有成员变量先赋个初值//下面单独修改通用定时器才用到的成员变量TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1 ;//PWM1模式,参考pptP68,PWM1模式和PWM2模式的区别TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//CNT<CCR时,REF置有效电平,参考pptP69TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//输出使能TIM_OCInitStructure.TIM_Pulse= 50;//设置CCR 即输出比较的值  这里随便给个测试,占空比50%TIM_OC1Init(TIM2,& TIM_OCInitStructure);

注意,上面用到了TIM_OCStructInit(&TIM_OCInitStructure);给所有成员变量赋值,这是为什么呢?
原因如下:
TIM_OCInitStructure.TIM_OCIdleState和TIM_OCInitStructure.TIM_OutputNState: Idle和里面含有N的一般都是高级定时器才用的
我们用到的都是通用定时器,但TIM_OCInitStructure成员里面有我们用不到的,例如刚才的TIM_OCInitStructure.TIM_OCIdleState
//那如果我们不给未用到的成员赋初值,那么后续就会有各种问题。
//这里可以使用TIM_OCStructInit()函数给所有成员给个默认值,然后单独再修改通用定时器模块的成员变量的值。

GPIO配置

	GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//观察引脚图可知,引脚定义,ppt11页可知GPIO_PA0有引脚复用的CH1GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);

这里解释下为何复用推挽,因为下图,来自片上外设一般使用复用功能输出
在这里插入图片描述

在这里插入图片描述

复用和重定义功能

引脚复用(Pin Multiplexing)是指单个物理引脚可以根据需要被不同的功能模块使用。在许多现代的微控制器中,物理引脚的功能并不是固定的,而是可以通过软件配置进行更改,这样可以使同一个引脚实现多种功能,这就是引脚复用。这种设计可以有效地节省物理引脚,提高了系统的灵活性。

重定义功能(Alternate Function)则是指在引脚复用功能中,每个物理引脚可以被分配多种不同的功能,这些功能通常是由于同一个引脚在不同的模式下所承担的功能不同而产生的。例如,同一个物理引脚在GPIO模式下可以用作普通的数字输入/输出引脚,而在UART模式下可以用作串行通信的引脚。在这种情况下,这个物理引脚就具有了两种不同的重定义功能。

在这里插入图片描述

开启定时器

最后一定要开启定时器

TIM_Cmd(TIM2,ENABLE);//开启定时器

如何更改占空比的值? 即CCR
使用TIM_SetCompare1函数即可

代码实现 :实现呼吸灯

PWM.c


```c
#include "stm32f10x.h"                  // Device header
/*** @brief   PWM初始化* @param   无* @retval  无*/
void PWM_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//开启GPIO的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//内部时钟配置TIM_InternalClockConfig(TIM2);//配置时基单元TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数的模式TIM_TimeBaseInitStructure.TIM_Period=100 -1;//重装值ARRTIM_TimeBaseInitStructure.TIM_Prescaler=7200 -1;//pscTIM_TimeBaseInitStructure.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure);//配置CCRTIM_OCInitTypeDef TIM_OCInitStructure;//TIM_OCInitStructure.TIM_OCIdleState和TIM_OCInitStructure.TIM_OutputNState:  Idle和里面含有N的一般都是高级定时器才用的//我们用到的都是通用定时器,但TIM_OCInitStructure成员里面有我们用不到的,例如刚才的TIM_OCInitStructure.TIM_OCIdleState//那如果我们不给未用到的成员赋初值,那么后续就会有各种问题。//这里可以使用TIM_OCStructInit()函数给所有成员给个默认值,然后单独再修改通用定时器模块的成员变量的值。TIM_OCStructInit(&TIM_OCInitStructure);//给所有成员变量先赋个初值//下面单独修改通用定时器才用到的成员变量TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1 ;//PWM1模式,参考pptP68,PWM1模式和PWM2模式的区别TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//CNT<CCR时,REF置有效电平,参考pptP69TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//输出使能TIM_OCInitStructure.TIM_Pulse= 0;//设置CCR 即输出比较的值  这里随便给个测试,后面通过函数TIM_SetCompare1单独更改TIM_OC1Init(TIM2,& TIM_OCInitStructure);//GPIO配置GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出,为何用复用推挽?因为ppt20页码,GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//观察引脚图可知,引脚定义,ppt11页可知GPIO_PA0有引脚复用的CH1GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);TIM_Cmd(TIM2,ENABLE);//开启定时器}
/*** @brief   设置占空比 * @param   Compare:CCR,比较/捕获 占空比 * @retval  无*/void PWM_SetCompare1(uint16_t Compare)
{TIM_SetCompare1(TIM2,Compare);
}

main .c

#include "stm32f10x.h"                  // Device header
#include "OLED.h"  
#include "PWM.h" 
#include "Delay.h" 
uint8_t i;
int main()
{OLED_Init();PWM_Init();while(1){for(i=0;i<=100;i++)//逐渐变亮{PWM_SetCompare1(i);Delay_ms(10);}for(i=0;i<=100;i++){PWM_SetCompare1(100-i);//逐渐变灭Delay_ms(10);}}}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络学习:IPV6地址详解

目录 前言&#xff1a; 一、IPV6的由来 二、什么是IPV6地址&#xff1f; IPV6地址结构&#xff1a; 前言&#xff1a; IPV6&#xff08;Internet Protocol Version 6&#xff09;是网络层协议的第二代标准协议&#xff0c;也被称为IPng&#xff08;IP Next Generation&…

ELK之使用Filebeat插件收集日志到Logstash

对于Springboot项目接入ELK非常方便&#xff0c;对于非maven&#xff0c;非Spring项目来说就比较复杂&#xff0c;这个时候我们就可以使用Filebeat插件还完成日志的收集发送工作。 Filebeat介绍 Filebeat是用于转发和收集数据的轻量级工具&#xff0c;Filebeat可以监视指定的…

LEETCODE LCS 03. 主题空间

题目描述如上&#xff0c;这个题主要运用了DFS的思想&#xff0c;同时走过的路径标记为6&#xff0c;即可在后续的遍历中过滤掉重复的元素&#xff0c;其他则类似边界条件的判断和题目条件的判断&#xff0c;求最大值&#xff0c;只需要一次遍历中累加对比每一次得即可。 模板&…

数据结构与算法-树-二分搜索树(一)

二分搜索树 今天我们尝试构建一颗二分搜索树&#xff0c;很多同学只有理论&#xff0c;并没有对树有其编码实践。通过一步步的实现一颗二分搜索树&#xff0c;加深对数据结构树的理解。 二分搜索树&#xff0c;又名二分排序树&#xff0c;有人也叫它二分查找树。 特点 二分搜索…

最强AI换脸工具Rope使用教程,Rope整合包下载【全网最全安装步骤】

Rope的汉化整合包&#xff08;包含模型&#xff09;以及下面教程所涉及到的所有安装包我都打包好了&#xff0c;需要的小伙伴可以关注文章底部公众号&#xff0c;回复关键词【rope】获取。 AI换脸软件简介必读 Rope 是一个免费开源的 AI 换脸软件&#xff0c;它具有图形化界面…

[ROS 系列学习教程] rosbag Python API

ROS 系列学习教程(总目录) 本文目录 1. 构造函数与关闭文件2. 属性值3. 写bag文件内容4. 读bag文件内容5. 将bag文件缓存写入磁盘6. 重建 bag 文件索引7. 获取bag文件的压缩信息8. 获取bag文件的消息数量9. 获取bag文件记录的起止时间10. 获取话题信息与消息类型 rosbag 的 Pyt…

如何创建用户流(User Flow):分步指南

原文作者&#xff1a;Camren Browne&#xff0c;CareerFoundry 翻译&#xff1a;数字营销工兵 (sources: 图片来源于网络&#xff09; 用户流(User Flow)是当今用户体验行业中最有用但被误解的工具之一。资深设计师经常避开它们&#xff0c;而初级设计师则很难抓住它们。 事…

炸裂!全球首个AI程序员!

近年来&#xff0c;人工智能&#xff08;AI&#xff09;在多个领域取得了显著进展&#xff0c;不断拓展其能力边界。一个引人注目的突破是全球首个AI程序员——Devin的诞生。 这一创新不仅展示了AI技术的快速进步&#xff0c;而且对软件开发领域和未来的工作场景产生了深远的影…

关于ffmpeg height not divisible by 2的错误

在我们线上视频生产过程中&#xff0c;我们用ffmpeg对视频做了resize&#xff0c;讲原有的分辨率resize到1280p&#xff0c;使用了参数 -vf "scale1280:-1"&#xff0c;作用是将原始视频宽度缩放成1280&#xff0c;-1是指高度等比例缩放。 之前一直运行的好好的&…

网络基础知识-操作系统作用+进程管理-嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记&#xff0c;未经本人许可&#xff0c;请勿转载&#xff0c;如发现本笔记内容的错误还望各位不吝赐教&#xff08;笔记内容可能有误怕产生错误引导&#xff09;。 本章的主要内容见下图&#xff1a; 本章知识和计算机…

Twitter代运营服务商哪家好?CloudNEO为您提供全链解决方案

在当今社交媒体盛行的时代&#xff0c;Twitter作为全球最知名的社交平台之一&#xff0c;已成为企业推广品牌、吸引客户和增加曝光的重要渠道。然而&#xff0c;如何有效地利用Twitter进行品牌推广和营销&#xff0c;成为许多企业面临的挑战。在这个背景下&#xff0c;选择一家…

HarmonyOS(鸿蒙)不再适合JS语言开发

ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以以更简洁、…

OpenvSwitch VXLAN 隧道实验

OpenvSwitch VXLAN 隧道实验 最近在了解 openstack 网络&#xff0c;下面基于ubuntu虚拟机安装OpenvSwitch&#xff0c;测试vxlan的基本配置。 节点信息&#xff1a; 主机名IP地址OS网卡node1192.168.95.11Ubuntu 22.04ens33node2192.168.95.12Ubuntu 22.04ens33 网卡信息&…

通过键盘对机械臂进行操作

1 #include<myhead.h>2 #include<linux/input.h>3 #define SER_PORT 88884 #define SER_IP "192.168.116.225"5 #define CLI_PORT 99996 #define CLI_IP "192.168.65.129"7 int main(int argc, const char *argv[])8 {9 //1、创建用于连接…

28.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据推测结果用提示框的形式显示

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;27.数据推测功能…

便利店小程序有哪些功能

​便利店小程序为附近的住户提供小程序在线购物的服务。用户只需要打开小程序&#xff0c;就可以购买需要的商品&#xff0c;可以选择自取或者配送。整个过程非常简单快速。下面具体介绍便利店小程序的功能。 1. **商品展示**&#xff1a;展示便利店的商品信息&#xff0c;包括…

贪心算法题解

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;这篇文章将给大家介绍贪心算法和贪心算法题目的练习和解析&#xff0c;贪心算法的本质就是每一个阶段都是局部最优&#xff0c;从而实现全局最优。我们在做题的同时&#xff0c;不仅要把题目做出来&#xff0c;还要有严格的证…

9 个顶级免费视频压缩软件精选

视频有多种格式、不同的大小和不同的压缩级别。但是&#xff0c;您可以使用最好的视频压缩器来&#xff1a; 减小文件大小提高压缩质量更好地服务您的观众 我们将列出九个领先的视频压缩软件精选&#xff0c;您今天可以免费使用它们来增强您的视频。 9 个顶级免费视频压缩器精…

【黑马程序员】Python综合案例

文章目录 数据分析案例目的需求数据准备实践数据记录类 文件解析解析csv格式解析json文件 进行数据计算读取文件数据按日期累加数据 图表展示图标绘制最终效果展示 数据分析案例 目的 文件操作实践json库使用三方库pyecharts使用面向对象实践数据容器使用 需求 给定一个csv…

设计模式之外观模式(Facade Pattern)【结构性模式】

为什么用结构性模式&#xff1f; 结构性模式关注点“怎样组合对象/类&#xff1f;”所以我们关注下类的组合关系类结构型模式关心类的组合&#xff0c;由多个类可以组合成一个更大的&#xff08;继承&#xff09;对象结构型模式关心类与对象的组合&#xff0c;通过关联关系在一…