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

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

[复制链接]
tangwenxue 提问时间:2012-1-9 10:20 /
下面先贴出程序
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的高电平时间吧  不过为什么不可以呢?我用来做超声波模块的。
收藏 评论3 发布时间:2012-1-9 10:20

举报

3个回答
tangwenxue 回答时间:2012-1-9 11:18:21

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

现在的想法是:上升沿进入中断 中断中whlie(引脚高电平),然后获得TIM的counter。不知道该怎么办呢。
tangwenxue 回答时间: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);
        }
}
可以实现功能,不过哪里可以精简?
废鱼 回答时间:2012-1-10 09:08:15

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

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

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版