打印
[STM32F0]

有关定时器3的输入捕获

[复制链接]
1162|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
putron09|  楼主 | 2015-5-10 21:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按如下配置了,但是进不了中断,用示波器看了PA7管脚有红外波形,不知道问题出在哪里
void time_Config(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        TIM_ICInitTypeDef  TIM_ICInitStructure;

        /* TIM3 clock enable */
       RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

        /* GPIOA clock enable */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

       //Tim3,AF功能配置
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_1);
          
        /* TIM3 channel 2 pin (PA.7) configuration */
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /* Enable the TIM3 global Interrupt */
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPriority = IRQChannelPriority_TIM3;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);

        TIM_TimeBaseInitStructure.TIM_Prescaler = 30;
        TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Down;
        TIM_TimeBaseInitStructure.TIM_Period = 65535;
        TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
        TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);

        TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
        TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
        TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
        TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
        TIM_ICInitStructure.TIM_ICFilter = 0x0;
        TIM_ICInit(TIM3, &TIM_ICInitStructure);
       
        TIM_SetCounter(TIM3, 65535);

        /* Enable the CC2 Interrupt Request */
        TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);

        /* TIM enable counter */
        TIM_Cmd(TIM3, ENABLE);
}

void TIM3_IRQHandler(void)
{
        if(TIM_GetITStatus(TIM3, TIM_IT_CC2) == SET)
        {
                IC3ReadValue = TIM_GetCapture2(TIM3);
                TIM_SetCounter(TIM3, 65535);
                /* Clear TIM3 Capture compare interrupt pending bit */
                TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);
        }
}
沙发
putron09|  楼主 | 2015-5-10 21:40 | 只看该作者
补充一下,用的是 STM32F030F4P6

使用特权

评论回复
板凳
amanda_s| | 2015-5-11 15:34 | 只看该作者
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
这里配置成input模式,后面又配置AF功能
//Tim3,AF功能配置
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_1);

至少这里感觉有问题。

使用特权

评论回复
评论
putron09 2015-5-16 21:38 回复TA
谢谢 
地板
putron09|  楼主 | 2015-5-12 22:02 | 只看该作者
谢谢楼上的,但是这个配置不冲突。
版主出来解释下

使用特权

评论回复
5
mark0668| | 2015-5-12 22:23 | 只看该作者
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
这个是输入还是复用功能??      是要把他设置为复用功能的

使用特权

评论回复
6
18241108933| | 2015-5-12 23:21 | 只看该作者
TIM_SetCounter(TIM3, 65535);
这个之前调用一下:
TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);
试试。

使用特权

评论回复
7
amanda_s| | 2015-5-19 10:06 | 只看该作者
putron09 发表于 2015-5-12 22:02
谢谢楼上的,但是这个配置不冲突。
版主出来解释下

楼主是搞定了吗?是配置冲突的原因吗?

使用特权

评论回复
8
putron09|  楼主 | 2015-5-21 21:15 | 只看该作者

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;   这样就可以了

使用特权

评论回复
9
可可球| | 2015-5-21 21:16 | 只看该作者


楼主搞出来了,赞

使用特权

评论回复
10
尤彼卡| | 2015-5-21 21:18 | 只看该作者
新手,能不能解释一下

使用特权

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

本版积分规则

12

主题

172

帖子

2

粉丝