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

请教一个关于STM32F407脉宽测量问题

[复制链接]
longfei_3 提问时间:2016-11-14 17:41 /
我打算用TIM9测量波形的脉宽长度,但是读取的置始终为0,请各位大牛帮我看看原因:
初始化:
void TIM9Capture1Init()
{
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    TIM_ICInitTypeDef TIM_ICInitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM9,ENABLE);  //ENABLE TIM9 of RCC          
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); //enable GPIOE of RCC       

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;       
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
    GPIO_Init(GPIOE,&GPIO_InitStructure);

    GPIO_PinAFConfig(GPIOE,GPIO_PinSource5,GPIO_AF_TIM9);


    TIM_TimeBaseStructure.TIM_Prescaler=0xFFFF;  
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseStructure.TIM_Period=20;//4Mh
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;

    TIM_TimeBaseInit(TIM9,&TIM_TimeBaseStructure);


    TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
    TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;
    TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;

    TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
    TIM_ICInitStructure.TIM_ICFilter = 0x0;
    TIM_ICInit(TIM9, &TIM_ICInitStructure);




    NVIC_InitStructure.NVIC_IRQChannel = TIM1_BRK_TIM9_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    TIM_ITConfig(TIM9,TIM_IT_Update|TIM_IT_CC1,ENABLE);
    TIM_Cmd(TIM9,ENABLE);
    TIM_SetCounter(TIM9,0);

}
中断服务函数:
void TIM1_BRK_TIM9_IRQHandler(void)
{
static uint8_t test=0;
    uint8_t tdat;

    if(TIM_GetITStatus(TIM9, TIM_IT_Update) != RESET)//超时处理
    {                 
          TIM_SetCounter(TIM9,0);
          TIM_ClearITPendingBit(TIM9,TIM_IT_Update);
    }         

    if(TIM_GetITStatus(TIM9, TIM_IT_CC1) != RESET)
    {       
            if(test%2==0) IO0_SET();//IO口翻转测试,该处波形与输入波形一致,周期约24us
            else IO0_CLR();
            test++;
        tdat=TIM_GetCapture1(TIM9);
        my.buf[my.wpos++] = tdat;
        TIM_SetCounter(TIM9,0); //重新计算超时
        TIM_ClearITPendingBit(TIM9, TIM_IT_CC1);
    }               


}



收藏 1 评论6 发布时间:2016-11-14 17:41

举报

6个回答
wenyangzeng 回答时间:2016-11-15 09:40:24
本帖最后由 wenyangzeng 于 2016-11-15 09:42 编辑
longfei_3 发表于 2016-11-15 08:58
OCx不是输出控制吗?我这是输入捕获啊

捕捉应该用到的,官方例程很多,可以参考。

InputCapture.rar

下载

12.46 KB, 下载次数: 15, 下载积分: ST金币 -1

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

weigr 回答时间:2016-11-14 19:51:24
期待高手解答……
wenyangzeng 回答时间:2016-11-14 20:03:59
楼主你貌似未对IM_OCx进行初始化配置。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

longfei_3 回答时间:2016-11-15 08:58:36
wenyangzeng 发表于 2016-11-14 20:03
楼主你貌似未对IM_OCx进行初始化配置。

OCx不是输出控制吗?我这是输入捕获啊
longfei_3 回答时间:2016-11-15 10:15:38
wenyangzeng 发表于 2016-11-15 09:40
捕捉应该用到的,官方例程很多,可以参考。

谢谢,但是我用的TIM9还是一样,捕获的全是0
mydy 回答时间:2017-6-28 14:30:07
有没有完整正确代码,分享,学习下,谢谢!

所属标签

相似问题

官网相关资源

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