打印

PWM输入捕获不了

[复制链接]
2327|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2013-7-21 21:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PWM, TI, ic, IO, pi
我PWM输入捕获不了,总是乱码一堆,贴代码:
void PWM_cap()
{
TIM_ICInitTypeDef timic;
GPIO_InitTypeDef gpio;
TIM_TimeBaseInitTypeDef timebase;
NVIC_InitTypeDef nvic;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);

gpio.GPIO_Mode = GPIO_Mode_IN_FLOATING;
gpio.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOA,&gpio);

timebase.TIM_Period = 0xffff;
    timebase.TIM_Prescaler = 71;
    timebase.TIM_ClockDivision = 0;
    timebase.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM5,&timebase);

timic.TIM_Channel = TIM_Channel_1;
timic.TIM_ICFilter = 0;
timic.TIM_ICPolarity = TIM_ICPolarity_Falling;
timic.TIM_ICPrescaler = TIM_ICPSC_DIV1;
timic.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_PWMIConfig(TIM5,&timic);
   
nvic.NVIC_IRQChannel = TIM5_IRQn;
nvic.NVIC_IRQChannelPreemptionPriority = 0;
nvic.NVIC_IRQChannelSubPriority = 0;
nvic.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic);
TIM_Cmd(TIM5,ENABLE);
TIM_ITConfig(TIM5,TIM_IT_CC1,ENABLE);
}

void TIM5_IRQHandler()
{
      int pl,zkb;
  pl = TIM_GetCapture1(TIM5);
  zkb =        TIM_GetCapture2(TIM5);
  zkb = zkb *100/pl;
  pl = 1000000/pl;
      Nokia_5110_int2str(zkb,0,0);
      Nokia_5110_int2str(pl,0,2);
      Nokia_5110_int2str(123,0,5);
  pl=0;
  zkb=0;
  TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);


}
哪位朋友能给指点一下.
沙发
wangliuliu566| | 2013-7-21 22:14 | 只看该作者
1、首先指出一个问题 :最后一句应该是 TIM_ClearITPendingBit(TIM5, TIM_IT_CC1);
2、可行性代码:楼主可以这样配置Timer5:

//初始化定时器5 TIM5         
        TIM_TimeBaseStructure.TIM_Period = 0xFFFF-1; //设定计数器自动重装值
        TIM_TimeBaseStructure.TIM_Prescaler =72-1;         //预分频器   
        TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
  
        //初始化TIM5输入捕获参数
        TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01(对应PA0)         选择输入端 IC1映射到TI1上
          TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        //上升沿捕获
          TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
          TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;         //配置输入分频,不分频
          TIM5_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器 不滤波
          TIM_ICInit(TIM5, &TIM5_ICInitStructure);
        TIM_SelectInputTrigger(TIM5, TIM_TS_TI1FP1);                //选择IC2为始终触发源
    TIM_SelectSlaveMode(TIM5, TIM_SlaveMode_Reset);//TIM从模式:触发信号的上升沿重新初始化计数器和触发寄存器的更新事件
    TIM_SelectMasterSlaveMode(TIM5, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发

        TIM_ITConfig(TIM5,TIM_IT_CC1,ENABLE);//允许CC1IE捕获中断               
           TIM_Cmd(TIM5,ENABLE );         //使能定时器5

使用特权

评论回复
板凳
wangliuliu566| | 2013-7-21 22:17 | 只看该作者

TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        //上升沿捕获
换成
TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;        //上升沿捕获

使用特权

评论回复
地板
xzp114| | 2013-7-22 10:30 | 只看该作者
输入捕获的管脚配置上要注意,不能简单的配置为浮空输入,比如你捕获的是下降沿,最好设置为上拉输入,捕获上升沿设置为下拉输入

使用特权

评论回复
5
拿起书本| | 2013-7-23 17:52 | 只看该作者
呵呵,库函数对初学者不适合,库函数本身就是对寄存器操作的,参数设置结构化

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

粉丝