OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3214|回复: 0

想请教一下,关于定事情内部触发的问题。

[复制链接]

3

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
214
金钱
214
注册时间
2015-12-25
在线时间
65 小时
发表于 2016-1-2 15:59:47 | 显示全部楼层 |阅读模式
15金钱
我想根据网上《用STM32触发捕捉实现告诉、高精度测频》的方法做一个频率计,但是现在遇到了关于定时器内部触发上面的问题。原文链接:http://www.mesnet.com.cn/fileup/HTML/20130310.shtml
2013031001.gif
上面是选择将TIM4作为主模式定时器,TIM2作为从模式定时器,通过对TIM4->CR2,将主控模式设为输出溢出触发脉冲。然后通过设置TIM2的从模式控制寄存器(SMCR)的从模式选择(SMS[2:0])设为复位模式,同时选择TIM4内部触发。现在我遇到的问题是不能进入到TIM2的比较中断里面,想请教一下大家。
我的代码:
//配置TIM4
void TIM4_Int_Init(u16 arr,u16 psc)    //9999,7199
{
        NVIC_InitTypeDef NVIC_InitStructure;       
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);        //
        TIM4->ARR=arr;          //
        TIM4->PSC=psc;          //
        TIM4->SMCR |= 0<<14; //禁止外部时钟模式模式2
        TIM4->SMCR |= 0<<0;  //关闭从模式
               
        NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM3
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ
        NVIC_Init(&NVIC_InitStructure);  //

        TIM4->DIER|=1<<0;   //允许中断更新
        TIM4->CR1|=0x01;    //使能计数器
}

//定时器4中断
void TIM4_IRQHandler(void)
{
       if(TIM4->SR&0X0001)   //
        {
                TIM4->SR&=~(1<<0);//清除标志位
                TIM4->CR2 |= 2<<4;//主控模式设为输出溢出触发脉冲
                LED2_REV;//对LED2取反
       }       
}

//定时器计数器2的简单配置
void TIM2_Excnt_Init(u16 arr,u16 psc)

      TIM2->ARR = arr;
      TIM2->PSC = psc;

       TIM2->SMCR = 3<<4;//TS=011;内部触发TIM4
       TIM2->SMCR = 4<<0;//SMS=100;复位模式
       TIM2->DIER|=1<<0;
       TIM2->CR1|=1<<0;


void TIM2_IRQHandler(void)

        if(TIM2->SR&0X0002)//
        {
                LED3_REV;
                TIM2->SR&=~(1<<1);        //       
        }
}

int main(void)
{       
        delay_init();
        LED_Init();
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        TIM4_Int_Init(9999,7199);//1s中断
        TIM2_Excnt_Init(0xffff,0);//
        while(1)
        {
                        //delay_ms(200);       
        }
}


代码有些不符合格式,还请见谅,这是我调试的。

现在是TIM4能进入中断,LED2能正常取反,但是LED3处于一直亮的状态,希望有知道的同学能帮我解答一下,谢谢了。





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 23:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表