stm32篇--定时器和PWM

Stm32学习(十)通用定时器pwm 1.PWM工作过程 CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值。 CCMR1:OC1M[2:0]位:对于PWM方式下,用于设置PWM模式1【110】或者PWM模式2【111】。 CCER:CC1P位:输入/捕获1输出极性。0:高电平有效,1:低电平游戏。 CCER:CC1E位:输入/捕获1输出使能。0:关闭,1:打开。 2.PWM模式 脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率,由TIMx_CCRx寄存器确定占空比的信号。 在TIMx_CCMRx寄存器,最后还要设置T 阅读详情

1.定时器
(1)在RCC初始化函数中设置定时器时钟使能:
/* TIM2 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2  , ENABLE);
(2)设置定时器中断向量:
 /* Configure one bit for preemption priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  /* Enable the TIM2 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//该参数设置了成员NVIC_IRQChannel中的先占优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //该参数设置了成员NVIC_IRQChannel中的从优先级 NVIC_PriorityGroup_0,则参数NVIC_IRQChannelPreemptionPriority对中断通道的设置不产生影响。
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//该参数指定了在成员NVIC_IRQChannel中定义的IRQ通道被使能还是失能。这个参数取值为ENABLE或者DISABLE。
  NVIC_Init(&NVIC_InitStructure);//把NVIC_InitStruct初始化
(3)初始化定时器并使能:
  TIM_DeInit(TIM2);//复位TIM2定时器
  TIM_TimeBaseStructure.TIM_Period = 20000; //计数值20000    
  TIM_TimeBaseStructure.TIM_Prescaler = 719;//(72M/(1+TIM_Prescaler ))/(1+TIM_Period ) = 频率
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; // 时钟分割
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //计数方向向上计数
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  TIM_ClearFlag(TIM2, TIM_FLAG_Update);
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  TIM_Cmd(TIM2, ENABLE);
  这里无非就是时钟分频,设置计数模式,设置时钟更行,计时值,然后交给初始化函数。
(4)在定时器中断函数里检查中断状态,清楚标志位,然后在里面做我们想做的事情:
void TIM2_IRQHandler(void)
{
  if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  {
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
   }
}

2.PWM

pwm控制也是使用time,只不过它不再使用中断函数而且发生中断后自动设置
对应的端口电平,所以只需要配置好就好了,记得打开时钟中断的时钟.
(1)设置端口:
  //TIM1完全重映射管脚
  GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);
  /* Configure motor control TIM1_CH2 (PE.11)as output push-pull */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
  即重映射时钟功能,像平时一样设置对应管脚。
(2)初始化时钟:
   /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 1999;
  TIM_TimeBaseStructure.TIM_Prescaler =720-1/*720/8-1*/;
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//0
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
  //==启用ARR的影子寄存器(直到产生更新事件才更改设置)
  TIM_ARRPreloadConfig(TIM3, ENABLE);
  /* PWM1 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//60
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//配置为互补输出
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
  TIM_OCInitStructure.TIM_Pulse = CCR_Val_steer;//150
  TIM_OC1Init(TIM3, &TIM_OCInitStructure);
  //==启用CCR1寄存器的影子寄存器(直到产生更新事件才更改设置)
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
  /* TIM3 enable counter */
  TIM_Cmd(TIM3, ENABLE);
  /*=== TIM3_OC通道输出PWM ===*/
  TIM_CtrlPWMOutputs(TIM3, ENABLE);
这里设置时钟分频,计数值及比较值及启动影子寄存器等,以上的只要修改很少的参数就可
重复使用。

定时器&PWM 定时器,PWM 阅读详情

相关推荐

STM32-定时器与PWM

PWM 即脉冲宽度调制(Pulse - Width Modulation),是一种对模拟信号电平进行数字编码的方法。它通过调节脉冲信号的占空比(Duty Cycle)来控制输出信号的平均功率或平均电压等,占空比是指脉冲信号中高电平持续时间与整个周期的比值。例如,一个周期为 10ms 的脉冲信号,高电平持续时间为 6ms,那么占空比就是 6ms/10ms = 60%。选择PA1作为LED灯的输出,将其选为GPIO-OUT定时器在 STM32 中犹如一个精准的时钟管理者。

gqiaos524的博客 2166

ARM32开发--PWM与通用定时器

在微控制器开发中,理解和掌握PWM(脉宽调制)技术以及与定时器的关系是至关重要的。PWM技术可以广泛应用于工业自动化、电机控制、LED调光等领域,通过改变信号的脉冲宽度来控制电路输出。本文将介绍PWM原理、开发流程,以及如何通过定时器实现PWM功能。通过学习本文,您将掌握通用定时器开发流程,理解周期、分频系数、周期计数、分频计数等概念,以及掌握分频计数、周期计数和占空比的计算策略。本文详细介绍了PWM技术以及与定时器的关系,通过示例代码演示了在ARM32系列芯片中如何实现PWM功能。

xuewenyu_的博客 1283

STM32单片机基础12——使用通用定时器产生PWM驱动蜂鸣器

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的通用定时器外设,产生PWM驱动无源蜂鸣器。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): 蜂鸣器 这里我直接使用扩展板上的蜂鸣器,如图: 蜂鸣器的原理图如下: 软件准备 需要安装好Keil - MDK及芯片对应的包,以便编译和下载生成的...

小熊派开源社区的博客 4190

原来PWM这么简单!通过锯齿波作为载波和调制波经过比较,产生相应的PWM输出波形

目录 基本原理 PWM是如何实现? 分类 程序实现 总结 基本原理 PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式; 所以根据面积等效法则,可以通过对改变脉冲的时间宽度,来等效的获得所需要合成的相应幅值和频率的波形; 具体如下图所示; 由上图可知,脉冲宽度调制使用一个脉冲宽度会被调制的方波,并且波型的平均值会有所变化。 如果我们考虑一个周期

二进制模----细微行动改变影响世界 4万+

STM32的PWM和DAC练习

STM32的PWM和DAC练习一、STM32 采用定时器的方法输出 PWM 波形1、PWM的介绍2、了解定时器实现PWM波形输出3、相关配置4、实现输出PWM5、小结6、参考资料二、STM32F103的DAC功能完成波形输出 一、STM32 采用定时器的方法输出 PWM 波形 1、PWM的介绍 PWM(脉冲宽度调制)控制技术 通过对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。 PWM 控制的基本原理 冲量相等而开头不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。其中冲量指窄脉冲的面

iostreamhvoid的博客 721

stm32-利用stm32f334的Hrtim定时器创建多路互补pwm波--基于HAL和CubeMx

最近在用stm32f334,在此留个笔记 有关f334的Hrtim定时器的高精度,大家可以自行百度,我就不做搬运工了。 1.现在CubeMx中创建一个相关的工程,先是rcc和sys的设置 2.HRTIM定时器的配置 接着先配置时钟树 再回到HRTIM定时器的配置中(图中的频率标错了,0太多没数清,实际是产生100kHZ) TimerB和TimerC与TimerA一样,就不贴图了 生成项...

apple的博客 7324

STM32_基础入门(十一)第二篇_通用定时器使用详解

STM32_基础入门(十一)第二篇_通用定时器使用详解

weixin_50546241的博客 1万+

STM32标准库函数之 TIM1定时器产生PWM波

/* 函数功能:定时器1通道1 4产生PWM波 函数参数:无 函数返回值:无 函数描述:无 */ void Dingshiqi1_PWM_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //时间基 结构体变量 GPIO_InitTypeDef GPIO_InitStruct; //GPIO初始化 结构体变量 TIM_OCInitTypeDef TIM_OCInitStruct; //通道初始化 .

longjintao1的博客 8920

stm32 PWM & 定时器总结

介绍对stm32 time 的理解

ge23456789的专栏 2726

学习stm32 pwm 基础内容示例说明led 控制

学习stm32 pwm 基础内容示例说明led 控制

qq_35653974的博客 795

STM32 HAL库学习系列第4篇 定时器TIM----- 开始定时器与PWM输出配置

基本流程: 1.配置定时器 2.开启定时器 3.动态改变pwm输出,改变值 HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); 函数总结 __HAL_TIM_SET_COMPARE() // 是设置CCRx,一般是用在PWM输出的,控制PWM占空比 __HAL_TIM_GET_COMPARE // 是用来读取CCRx的,一...

CodeAllen嵌入式 5万+

STM32——PWM学习笔记

STM32的定时器除了TIM6和7。其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。而通用定时器也能同时产生多达4路的PWM输出。

m0_59113542的博客 2964

STM32开发(十五)STM32F103 片内资源 —— 通用定时器 PWN 无源蜂鸣器 详解

软件开发使用虚拟机 + VScode + STM32Cube 开发STM32,在虚拟机中直接完成编译下载。本实验通过STM32F103 的通用定时器 PWN功能,实现对无源蜂鸣器控制。实验效果:PWM频率从500Hz到4KHz变化,占空比为对应的一半。主控:STM32F103ZET6。该部分可参考:软件开发环境构建。

weixin_43564241的博客 1102

STM32使用定时器控制流水灯以及PWN信号控制呼吸灯实验

STM32应用实例

m0_58406663的博客 3642

六自由度机器人(机械臂)运动学建模及运动规划系列(一)——简介

毕业设计做了六轴机器人相关的课题,做完之后学到很多,在这里分享一下。

weixin_47849087的博客 2万+

飞塔防火墙和paloalto防火墙构建ipsec

一、配置fortigate防火墙1.防火墙配置上网功能1.1配置fortigate的wan1接口IP为100.100.100.2/24VLAN交换internal,IP地址为192.168.156.99/24。开启DHCP分配IP地址范围为192.168.156.110-192.168.156.2101.2配置访问互联网的缺省路由1.3配置访问互联网的安全策略2.配置与Paloalto防火墙的IPSECVPN。

weixin_44675999的博客 3738

stm32定时2通道3映射_STM32通用定时器使用详解

1.通用定时器基本介绍通用定时器包括TIM2、TIM3、TIM4和TIM5STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。定时器可以进行定时器基本定时,输出4路PWM,输入捕获本文详细介绍这三个功能并且利用定时器3并且示例代码使用2.开发环境开发平台:keil5单片机:STM32F103ZET63.基...

weixin_31321157的博客 2571

当OTN网络遭遇LOS告警:5个运维老手才知道的故障定位技巧(含CA动作对照表)

本文深入解析OTN网络中LOS告警的实战定位技巧,涵盖光功率深度诊断、模块差异分析及核心的CA动作机制。通过逆向追踪告警流与对照速查表,帮助运维人员快速锁定故障段落,区分硬软故障,并掌握系统健康度评估方法,从而提升排障效率与网络稳定性。

weixin_29266007的博客 551

STM32TIM定时器输出比较——PWM实现呼吸灯

1、(Outout Compar输出比较2、输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形3、每个高级定时器和通用定时器都拥有4个输出比较通道4、高级定时器的前3个通道额外拥有死区生成和互补输出的功能。

qq_56992543的博客 1498

从零构建AI辅助逆向分析环境:JADX-MCP与LLM的实战集成指南

本文详细介绍了如何从零构建AI辅助逆向分析环境,通过集成JADX-MCP与LLM技术,提升Android应用逆向工程效率。文章涵盖环境搭建、插件安装、MCP服务器配置及实战案例分析,帮助开发者快速掌握AI在代码理解、漏洞挖掘和自动化文档生成中的应用。

weixin_27875131的博客 839

高速窄脉冲峰值保持设计

一、目的 在激光探测领域,探测器发出的高速窄脉冲,单片机AD进行采样,很难捕捉到窄脉冲的幅值,即使使用高速AD进行采样,也存在一定的难度。因此,本方案设计了一种高速窄脉冲峰值保持电路,有助于单片机AD采样能很好的捕捉到脉冲幅值。 二、方案分析与比较 峰值保持器一般分为两种:电压型和跨导型。 方案一:电压型峰值保持器,由电压型运放、二极管、保持电容、缓冲器组成,优点是元件成本低,缺点是峰值保持存在过...

weixin_43184208的博客 9289

四、STM32之PWM输出实验

这一章,我们将向大家介绍如何使用 STM32 的 TIM3 来产生 PWM 输出。在本章中,我们将使 用 TIM3 的通道 2,把通道 2 重映射到 PB5,产生 PWM 来控制 DS0 的亮度。 STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定 时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。 而通用定时器也能同时产生多达 4 路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出! 要使 STM32 的

qq_42475191的博客 1810

如何完全卸载axure软件以及解决安装axure后打不开的问题【2023年】

如何完全卸载axure软件以及解决安装axure后打不开的问题【2023年】

念兮为美 5138
上一篇: stm篇--GPIO和串口
下一篇: stm32篇--内置flash
快乐的小鸟
博客等级 码龄14年 25粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值