当前位置: 首页 > news >正文

[STM32 标准库]定时器输出PWM配置流程 PWM模式解析

前言:

本文内容基本来自江协,整理起来方便日后开发使用。MCU:STM32F103C8T6。

一、配置流程

1、开启GPIOTIM的时钟

	/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);			//开启TIM2的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);			//开启GPIOA的时钟

2、GPIO初始化,模式为复用推挽输出

	/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;		//GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);							//将PA0引脚初始化为复用推挽输出	//受外设控制的引脚,均需要配置为复用模式	

3、TIM时基单元初始化

	/*配置时钟源*/TIM_InternalClockConfig(TIM2);		//选择TIM2为内部时钟,若不调用此函数,TIM默认也为内部时钟/*时基单元初始化*/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);             //将结构体变量交给TIM_TimeBaseInit,配置TIM2的时基单元

4、输出比较初始化

	/*输出比较初始化*/TIM_OCInitTypeDef TIM_OCInitStructure;							//定义结构体变量TIM_OCStructInit(&TIM_OCInitStructure);							//结构体初始化,若结构体没有完整赋值//则最好执行此函数,给结构体所有成员都赋一个默认值//避免结构体初值不确定的问题TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;				//输出比较模式,选择PWM模式1TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;		//输出极性,选择为高,若选择极性为低,则输出高低电平取反TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	//输出使能TIM_OCInitStructure.TIM_Pulse = 0;								//初始的CCR值TIM_OC1Init(TIM2, &TIM_OCInitStructure);						//将结构体变量交给TIM_OC1Init,配置TIM2的输出比较通道1

5、使能TIM

	/*TIM使能*/TIM_Cmd(TIM2, ENABLE);			//使能TIM2,定时器开始运行

6、编写设置占空比的函数

void PWM_SetCompare1(uint16_t Compare)
{TIM_SetCompare1(TIM2, Compare);		//设置CCR1的值
}

二、框图(二次开发或计算用)

1、PWM基本结构

在这里插入图片描述

2、参数计算在这里插入图片描述

3、PWM模式

PWM模式1:CNT < CCR时,输出有效电平;CNT ≥ CCR时,输出无效电平;
PWM模式2:CNT < CCR时,输出无效电平;CNT ≥ CCR时,输出有效电平;

占空比的定义:脉冲信号中高电平持续时间与整个周期时间的比率

TIM_OCInitStructureTIM_OCMode用来配置PWM模式,TIM_OCPolarity用来配置输出极性(即有效电平)。

对于PWM模式1PWM模式2,输出极性的高低,我做了一下四组实验,其中设置了CNT为100,CCR为40:

  • PWM模式1、输出极性高:占空比40%;(最常用的)
  • PWM模式1、输出极性低:占空比60%;
  • PWM模式2、输出极性高:占空比60%;
  • PWM模式2、输出极性低:占空比40%;

得出以下结论
在这里插入图片描述
对于PWM模式1:蓝色线段的下半段输出有效电平,上半段输出无效电平;
对于PWM模式2:蓝色线段的上半段输出无效电平,下半段输出有效电平;

http://www.lryc.cn/news/526961.html

相关文章:

  • web3py+flask+ganache的智能合约教育平台
  • < OS 有关 > 阿里云:轻量应用服务器 的使用 :轻量化 阿里云 vpm 主机
  • 【技术】TensorRT 10.7 安装指南(Ubuntu22.04)
  • Linux 权限管理
  • 8.2 从看图识字到智能解读:GPT-4 with Vision 开启多模态 AI 新纪元
  • 差分轮算法-两个轮子计算速度的方法-阿克曼四轮小车计算方法
  • 使用.NET 8构建高效的时间日期帮助类
  • 学习std::is_base_of笔记
  • 第 25 场 蓝桥月赛
  • 【设计模式-行为型】访问者模式
  • 无人机微波图像传输数据链技术详解
  • SpringCloud系列教程:微服务的未来(十七)监听Nacos配置变更、更新路由、实现动态路由
  • 【QT】 控件 -- 显示类
  • 反馈驱动、上下文学习、多语言检索增强等 | Big Model Weekly 第55期
  • CF 41A.Translation(Java实现)
  • 14【学历和能力哪个更重要】
  • Learning Vue 读书笔记 Chapter 2
  • SpringBoot支持动态更新配置文件参数
  • 开发技巧,vue 中的动态组件的引用 component + is
  • 基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API
  • PSD是什么图像格式?如何把PSD转为JPG格式?
  • c语言中mysql_query的概念和使用案例
  • 一次端口监听正常,tcpdump无法监听到指定端口报文问题分析
  • 解决InnoDB: Failing assertion: !lock->recursive
  • 基于微信小程序的外卖点餐系统设计与实现ssm+论文源码调试讲解
  • Helm Chart 实现 Kubernetes 应用的多环境部署与镜像更新
  • “腾讯、钉钉、飞书” 会议开源平替,免费功能强大
  • 我谈区域偏心率
  • 思科交换机telnet配置案例
  • 机器学习:支持向量机