你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 7294|回复: 3

香版:STM32捕捉PWM周期和脉宽时间程序分享及疑问

[复制链接]

2

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2012-1-9 10:20:29 | 显示全部楼层 |阅读模式
下面先贴出程序
void TIM4_Configuration(void)//TIM4初始化函数
{
//TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
//TIM_OCInitTypeDef  TIM_OCInitStructure;
 TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
 TIM_ICInitTypeDef  TIM_ICInitStructure;
 TIM_DeInit(TIM4);
 TIM_TimeBaseStructure.TIM_Period =7199;        
 TIM_TimeBaseStructure.TIM_Prescaler = 0;     
 TIM_TimeBaseStructure.TIM_ClockDivision = 0;  
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_PWMIConfig(TIM4, &TIM_ICInitStructure);  
TIM_SelectInputTrigger(TIM4, TIM_TS_TI2FP2); /* Select the TIM2 Input Trigger: TI2FP2 */  
TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset); /* Select the slave Mode: Reset Mode */
TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable); /* Enable the Master/Slave Mode */
TIM_Cmd(TIM4, ENABLE); /* TIM enable counter */  
TIM_ITConfig(TIM4, TIM_IT_CC2, ENABLE); /* Enable the CC2 Interrupt Request */
/*
 
 
void TIM4_IRQHandler(void)       
{  if(TIM_GetITStatus(TIM4, TIM_IT_CC2) == SET)
   {
    TIM_ClearITPendingBit(TIM4, TIM_IT_CC2);
    IC1_Value = TIM_GetCapture1(TIM4);
    IC2_Value = TIM_GetCapture2(TIM4);
    IC3_Value=180*IC1_Value*100/7200;
      }
测得的PWM的脉宽比周期正常。按照道理来说可以测量脉宽啊。 63f632df7c860148(1).jpg 也就是应该可以测量如图INTE的高电平时间吧  不过为什么不可以呢?我用来做超声波模块的。
回复

使用道具 举报

2

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-1-9 11:18:21 | 显示全部楼层

RE:香版:STM32捕捉PWM周期和脉宽时间程序分享及疑问

现在的想法是:上升沿进入中断 中断中whlie(引脚高电平),然后获得TIM的counter。不知道该怎么办呢。
回复 支持 反对

使用道具 举报

2

主题

7

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2012-1-9 19:15:12 | 显示全部楼层

回复:香版:STM32捕捉PWM周期和脉宽时间程序分享及疑问

现在我使用TIM2做一个脉冲然后用
void EXTI9_5_IRQHandler(void)
{
  IC3_Value=0;
  if(EXTI_GetITStatus(EXTI_Line8) != RESET)
        {
        while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8))
        {IC3_Value++;}
        IC3_Value=(int)IC3_Value*0.13515;
    /* 清除EXTI line8 中断挂起位 */
    EXTI_ClearITPendingBit(EXTI_Line8);
        }
}
可以实现功能,不过哪里可以精简?
回复 支持 反对

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2012-1-10 09:08:15 | 显示全部楼层

RE:香版:STM32捕捉PWM周期和脉宽时间程序分享及疑问

用外部中断,当产生边沿变化的时候产生中断,然后终端中使用计数器来赋值。通过使用每次进入中断时候,2个不同的计数的差值来判断。
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版