STM32定时器输出六路PWM.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
STM32定时器输出六路PWM

定时器实验实验要求编程序利用STM32的通用定时器TIM2和TIM3产生六路PWM输出。实验原理实验主要考察对STM32F10X系列单片机定时器的使用。STM32F103系列的单片机一共有11个定时器,其中:2个高级定时器4个普通定时器2个基本定时器2个看门狗定时器1个系统嘀嗒定时器出去看门狗定时器和系统滴答定时器的八个定时器列表;八个定时器分成3个组TIM1和TIM8是高级定时器TIM2-TIM5是通用定时器TIM6和TIM7是基本的定时器这8个定时器都是16位的,它们的计数器的类型除了基本定时器TIM6和TIM7都支持向上,向下,向上/向下这3种计数模式。本次试验主要用到通用定时器TIM2和TIM3。通用定时器(TIM2~TIM5)的主要功能:除了基本的定时器的功能外,还具有测量输入信号的脉冲长度( 输入捕获) 或者产生输出波形( 输出比较和PWM)。通用定时器的时钟来源;a:内部时钟(CK_INT)b:外部时钟模式1:外部输入脚(TIx)c:外部时钟模式2:外部触发输入(ETR)d:内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器通用定时期内部时钟的产生:通用定时器(TIM2-5)的时钟不是直接来自APB1,而是通过APB1的预分频器以后才到达定时器模块。当APB1的预分频器系数为1时,这个倍频器就不起作用了,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1时钟频率的两倍。PWM输出模式;STM32的PWM输出有两种模式:模式1和模式2,由TIMx_CCMRx寄存器中的OCxM位确定的(“110”为模式1,“111”为模式2)。区别如下:110:PWM模式1,在向上计数时,一旦TIMx_CNT在向下计数时,一旦TIMx_CNTTIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效电平(OC1REF=1)。111:PWM模式2-在向上计数时,一旦TIMx_CNTTIMx_CCR1时通道1为有效电平,否则为无效电平。由以上可知:模式1和模式2正好互补,互为相反,所以在运用起来差别也并不太大。而从计数模式上来看,PWM也和TIMx在作定时器时一样,也有向上计数模式、向下计数模式和中心对齐模式通用定时器PWM工作原理:以PWM模式1为例,定时器2向上计数,有效电平是高电平,定时器2的第1个PWM通道为例:定时器2的第1个PWM通道对应是PA0这引脚。当定时器2的计数器(TIM2_CNT)刚开始计数的时候是小于捕获/比较寄存器(TIM2_CCR1)的值,此时PA0输出高电平,随着计数器(TIM2_CNT)值慢慢的增加;当计数器(TIM2_CNT)大于捕获/比较寄存器(TIM2_CCR1)的值时,这时PA0电平就会翻转,输出低电平,计数器(TIM2_CNT)的值继续增加;当TIM2_CNT=TIM2_ARR的值时,TIM2_CNT重新回到0继续计数,PA0电平翻转,输出高电平,此时一个完整的PWM信号就诞生了。程序分析定时器配置函数为TIM_PWM_Init()(详细见TIM_pwm_output.h)。配置函数首先使能TIM2和TIM3时钟:?RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB1Periph_TIM3, ENABLE);然后自动装载计数值,计数从0开始:?TIM_TimeBaseStructure.TIM_Period = 999;?再对计时器进行预分频系数设置(这里不分频):?TIM_TimeBaseStructure.TIM_Prescaler = 0;?并将计数器设置为向上计数:?TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;?最后写入计时器配置寄存器,完成配置:?TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure);TIM_TimeBaseInit(TIM3, TIM_TimeBaseStructure);?配置为PWM模式1:TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;设置跳变值:TIM_OCInitStructure.TIM_Pulse = CCRx_Val;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;使能通道:TIM_OC1Init(TIMx, TIM_OCInitStructure);TIM_OC2PreloadConfig(TIMx, TIM_OCPreload_Enable);配置完

文档评论(0)

153****9595 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档