STM32F103系列定时器TIM2 产生多路PWM —占空比可修改

2023-11-02

**

STM32F103系列定时器TIM2 产生多路PWM —占空比可修改

**

一、查看手册

手册中标明,当PA0~PA3当做TIM2 PWM输出时需要打开重映射功能GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2, ENABLE);

在这里插入图片描述

二、使用步骤

1. TIM2 PWM初始化配置

产生的pwm频率为: Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz):

/**************************************************************************
函数功能:PWM初始化
入口参数:无
返回  值:无
频率:      Fpwm = 72M / ((arr+1)*(psc+1))(单位:Hz)
占空比:  duty circle = TIM2->CCR1 / arr(单位:%)
**************************************************************************/
void TIM2_PWM_Init(u32 arr,u16 psc)
{	
    uint16_t ChannelPulse = 0; 
    
	 GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);// 
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);                   
    GPIO_PinRemapConfig(GPIO_PartialRemap2_TIM2, ENABLE);       //TIM2 Remap CH1->PA15  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3 ; //TIM2_CH1 TIM2_CH2 TIM2_CH3 TIM2_CH4
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
   TIM_TimeBaseStructure.TIM_Period = arr;
	TIM_TimeBaseStructure.TIM_Prescaler =psc; 
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; 
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); 
    
    ChannelPulse = (uint16_t) (((uint32_t) 50 * (arr+1)) / 100);//占空比30%

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_Pulse = ChannelPulse; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);  
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_Pulse = ChannelPulse; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
	TIM_OC2Init(TIM2, &TIM_OCInitStructure);  
	
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_Pulse = ChannelPulse; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
	TIM_OC3Init(TIM2, &TIM_OCInitStructure);  
	
	
		TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_Pulse = ChannelPulse; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
	TIM_OC4Init(TIM2, &TIM_OCInitStructure);  
 
    TIM_CtrlPWMOutputs(TIM2,ENABLE);		
    TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);   //使能第1路TIM2_CH1 pwm输出
	TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);   //使能第2路TIM2_CH2 pwm输出
	TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);   //使能第3路TIM2_CH3 pwm输出
	TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能第4路TIM2_CH4 pwm输出

	TIM_ARRPreloadConfig(TIM2, ENABLE); 
	
	TIM_Cmd(TIM2, ENABLE);  

}

## 2.主函数调用


```c
void main(void)
{
   uint16_t duty1, duty2,duty3,duty3;
   uint16_t arr_value;

   arr_value = 7199;
   //初始化占空比设置
   duty1 = (uint16_t) (((uint32_t) 50 * (arr_value+1)) / 100);//TIM2_CH1占空比50%
   duty2 = (uint16_t) (((uint32_t) 30 * (arr_value+1)) / 100);//TIM2_CH2占空比30%
   duty3 = (uint16_t) (((uint32_t) 60 * (arr_value+1)) / 100);//TIM2_CH3占空比60%
   duty4 = (uint16_t) (((uint32_t) 80 * (arr_value+1)) / 100);//TIM2_CH4占空比80%
   TIM2_PWM_Init(7199,4);
   for (;;) {
           //修改占空比设置
            TIM2->CCR1 = duty1 ; 
            TIM2->CCR2 = duty2 ;
            TIM2->CCR3 = duty3 ;
            TIM2->CCR4 = duty4 ;
        }
 }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F103系列定时器TIM2 产生多路PWM —占空比可修改 的相关文章

  • Linux网络的DHCP、FTP原理及配置

    DHCP原理与配置 DHCP服务 使用DHCP动态配置主机地址 DHCP服务 可分配的地址信息主要包括 配置DHCP服务器 FTP 用来传输文件的协议 端口号 FTP数据连接模式 实现FTP功能 实验 DHCP服务 使用DHCP动态配置主机

随机推荐

  • 视图在SQL中的应用

    我们之前对 SQL 中的数据表查询进行了讲解 今天我们来看下如何对视图进行查询 视图 也就是我们今天要讲的虚拟表 本身是不具有数据的 它是 SQL 中的一个重要概念 从下面这张图中 你能看到 虚拟表的创建连接了一个或多个数据表 不同的查询应
  • 锚点机制在目标检测领域的发展综述

    摘要 目标检测是计算机视觉领域的基本任务 近年来 基于深度学习的目标检测研究发展十分迅速 锚点 anchor 机制广泛应用于主流目标检测器中 多尺度的锚点是检测器解决尺度问题的有效方法 但锚点策略也存在尺寸固定 模型鲁棒性差等问题 根据优化
  • fifo介绍及fifo IP核使用(工程文件获取请参考文末)

    一 fifo简介 1 fifo first in first out的缩写 先进先出数据缓存器 与普通存储器的区别 对外接口没有地址线 由此所带来的优点是 不用处理地址信号 时序较简单 缺点是 不能像普通存储器那样自由读写某个地址的数据 只
  • 小巧玲珑:机器学习届快刀XGBoost的介绍和使用

    欢迎大家前往腾讯云技术社区 获取更多腾讯海量技术实践干货哦 作者 张萌 序言 XGBoost效率很高 在Kaggle等诸多比赛中使用广泛 并且取得了不少好成绩 为了让公司的算法工程师 可以更加方便的使用XGBoost 我们将XGBoost更
  • JVM垃圾回收器

    目录 串行垃圾回收器 Serial Collector 并发式垃圾回收器 7种经典垃圾回收器 Serial 收集器 ParNew收集器 Parallel Scavenge收集器 CMS收集器 G1收集器 小结 常用参数 按垃圾回收器的线程数
  • [管理与领导-74]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 构建自己的个人品牌

    前言 一 什么是信任账户 在职场中受到信任是建立良好声誉和专业形象的基础 以下是一些可以帮助职场人受到信任的方法 诚实守信 始终保持诚实和可靠的行为 遵守诺言 履行承诺 不轻易背信弃义 专业素养 展现专业的知识和技能 以及对工作的敬业精神
  • 51单片机学习之-串口中断

    串口中断 SM2 多机通信控制位 0 数据直接进入SBUF 并同时使R1致1 T1 发送中断标志位 发送数据自动由硬件置1 并且同时执行中断程序 也必须在中断程序中写0 RI 接收中断标志位 收到数据自动由硬件置1 并且同时执行中断程序 也
  • 全球与中国注塑磁体市场竞争策略分析及投资前景研究报告2021-2027年版

    全球与中国注塑磁体市场竞争策略分析及投资前景研究报告2021 2027年版 2020年 全球注塑磁体市场规模达到了 亿元 预计2027年将达到 亿元 年复合增长率 CAGR 为 本报告研究全球与中国市场注塑磁体的产能 产量 销量 销售额 价
  • 华为云云服务器评测|前端开发同学的初体验部署贪吃蛇!

    文章目录 前言 初配置 初始化宝塔面板 安装Nginx 上传项目 修改nginx配置 效果展示 前言 作为一名前端同学 我的技能和日常工作主要集中在用户界面的设计和交互上 与服务器产品相关的经验相对较少 正好看到了咱们华为云开展的评测活动
  • pta冒泡排序c语言_PTA 冒泡排序

    编程实现冒泡排序函数 void bubbleSort int arr int n 其中arr存放待排序的数据 n为数组长度 1 n 1000 函数接口定义如下 对长度为n的数组arr执行冒泡排序 void bubbleSort int ar
  • 统计学习:ANOVA(方差分析)(1)

    统计学习 最近在处理数据的过程中 越发发觉自己理论知识的薄弱 因此 开始了这一系列的帖子 记录自己的理论补充过程 同时方便后来人理解 ANOVA 方差分析 方差分析 Analysis of Variance 简称ANOVA 又称 变异数分析
  • 思科配置STP生成树协议

    第一步 给所有接口开trunk 第二步 左边的三层交换机和右边的三层交换机建立vlan 并给上IP地址 第三步 下面的二层交换机创建两个vlan 第四步 左边三层交换机配置 spanning tree mode pvst 开启vlan快速生
  • netty实现websocket推送消息

    前言 由于http协议为应答模式的连接 无法保持长连接于是引入了websocket套接字长连接概念 能够保持数据持久性的交互 本篇文章将告知读者如何使用netty实现简单的消息推送功能 websocket请求头 GET HTTP 1 1 H
  • apt 安装nginx

    ubuntu和debain下的apt方式安装软件很方便 特别是对于新手安装和卸载nginx 由于nginx不能动态添加模块 所以会经常安装和卸载 升级 apt安装nginx方法 sudo apt add repository ppa ngi
  • 旋转轴、旋转矩阵、四元数之间相互转换

    1 旋转轴To四元数 假设某个旋转是绕单位向量 n n x n y n z n n x n y n z n nx ny nz 进行了角度为 theta 的旋转 那么这个旋转的四元数形式为 q c o s 2 n x s i n 2 n y
  • java排查一个线上死循环cpu暴涨的过程

    问题 打一个页面cpu暴涨 打开一次就涨100 一会系统就卡的不行了 排查方法 因为是线上的linux 没有用jvm监控工具rim链接上去 只好用命令排查 top cpu排序 一个java进程cpu到500 了 什么鬼 查到对应java进程
  • 通过反射获取对象的所有属性&&表格的行转对象

    获取对象的属性并赋值 获取对象的属性方法 getFields 获得某个类的所有的公共 public 的字段 包括父类中的字段 getDeclaredFields 获得某个类的所有声明的字段 即包括public private和protece
  • 【图解】ERP系统如何操作?具体步骤是什么?

    信息时代 对于企业来说 实现统筹化管理 提升办公效率 这就是管理的王道 那么 如何快速实现这一目标呢 这就离不开ERP系统的使用了 在这里 我们就以智邦国际ERP系统的基本操作为例 给大家讲述一下 1 登录系统 每个企业的员工 对计算机知识
  • Java对blob文件的保存和解析

    1 在Java中经常需要保存一个xml文件到数据中 这个时候blob是最好的选择 但是保存的时候发现可不是那么容易的 网上很多资料都是先保存一个空的数据 再一点点插入进去 InputStream in new FileInputStream
  • STM32F103系列定时器TIM2 产生多路PWM —占空比可修改

    STM32F103系列定时器TIM2 产生多路PWM 占空比可修改 一 查看手册 手册中标明 当PA0 PA3当做TIM2 PWM输出时需要打开重映射功能GPIO PinRemapConfig GPIO PartialRemap2 TIM2