STM32测量高电平脉宽(TIM5CH1原子版).docVIP

  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测量高电平脉宽(TIM5CH1原子版)

测量PWM输出的高电平脉宽 //定时器5通道1输入捕获配置 //arr:自动重装值 //psc:时钟预分频数 void TIM5_Cap_Init(u16 arr,u16 psc) { RCC-APB1ENR|=13; //TIM5 时钟使能 RCC-APB2ENR|=12; //使能PORTA时钟 GPIOA-CRL=0XFFFFFFF0; //PA0 清除之前设置 GPIOA-CRL|=0 //PA0 输入 GPIOA-ODR|=00; //PA0 下拉 TIM5-ARR=arr; //设定计数器自动重装值 TIM5-PSC=psc; //预分频器 TIM5-CCMR1|=10; //CC1S=01 选择输入端 IC1映射到TI1上 TIM5-CCMR1|=04; //IC1F=0000 配置输入滤波器 不滤波 TIM5-CCMR1|=010; //IC2PS=00 配置输入分频,不分频 TIM5-CCER|=01; //CC1P=0 上升沿捕获 TIM5-CCER|=10; //CC1E=1 允许捕获计数器的值到捕获寄存器中 TIM5-DIER|=11; //允许捕获中断 TIM5-DIER|=10; //允许更新中断 TIM5-CR1|=0x01; //使能定时器2 MY_NVIC_Init(2,0,TIM5_IRQChannel,2);//抢占2,子优先级0,组2 } //捕获状态 //[7]:0,没有成功的捕获;1,成功捕获到一次. //[6]:0,还没捕获到高电平;1,已经捕获到高电平了. //[5:0]:捕获高电平后溢出的次数 u8 TIM5CH1_CAPTURE_STA=0; //输入捕获状态 u16 TIM5CH1_CAPTURE_VAL; //输入捕获值 //定时器5中断服务程序 void TIM5_IRQHandler(void) { u16 tsr; tsr=TIM5-SR; if((TIM5CH1_CAPTURE_STA0X80)==0)//还未成功捕获 { if(tsr0X01)//溢出 { if(TIM5CH1_CAPTURE_STA0X40)//已经捕获到高电平了 { if((TIM5CH1_CAPTURE_STA0X3F)==0X3F)//高电平太长了 { TIM5CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次 TIM5CH1_CAPTURE_VAL=0XFFFF; }else TIM5CH1_CAPTURE_STA++; } } if(tsr0x02)//捕获1发生捕获事件 { if(TIM5CH1_CAPTURE_STA0X40) //捕获到一个下降沿 { TIM5CH1_CAPTURE_STA|=0X80; //标记成功捕获到一次高电平脉宽 TIM5CH1_CAPTURE_VAL=TIM5-CCR1; //获取当前的捕获值. TIM5-CCER=~(11); //CC1P=0 设置为上升沿捕获 }else //还未开始,第一次捕获上升沿 { TIM5CH1_CAPTURE_STA=0; //清空 TIM5CH1_CAPTURE_VAL=0; TIM5CH1_CAPTURE_STA|=0X40; //标记捕获到了上升沿 TIM5-CNT=0; //计数器清空 TIM5-CCER|=11; //CC1P=1 设置为下降沿捕获 } } } TIM5-SR=0;//清除中断标志位 } 此部分代码包含2个函数,其中TIM5_Cap_Init函数用于TIM5通道1的输入捕获设置, 其设置和我们上面讲的步骤是一样的,这里就不多说,重点来看看第二个函数。 TIM5_IRQHandler是TIM5的中断服务函数,该函数用到了两个全局变量,用于辅助实现 高电平捕获。其中TIM5CH1_CAPTURE_STA,是用来记录捕获状态,该变量类似我们在usart.c里面自行定义的USART_RX_STA寄存器。TIM5CH1_CAPTURE_STA各位描述如表15.3.1所示: 现在我们来

文档评论(0)

taotao0c + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档