找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3167|回复: 1
打印 上一主题 下一主题
收起左侧

STM32F103用TIM2做计数器没进入中断

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
刚开始玩STM32,遇到一个问题,定时器做外部计数器用的时候没起作用。。。
while(1)
{
        delay_ms(100);
        CTR_Write_Config(Test_Address,CTR_Cap_Ceramic);                                        //打开通道
        CTR_Write_Config(COM_Address, CTR_Cap_TIM&CTR_L_GND);                        //打开振荡频率计数器,电感端接地
        CTR_Write_Config(Power_Address,CTR_Lo_GND);                                                //测试电容另一端接地
        delay_us(100);                                                                                                                                
                                       
                                               
        TIM2_Count_Init(5000,2);//TIM2初始化
        TIM2_ON();//打开TIM2
        while(1);
}
void TIM2_Count_Init(u16 arr,u16 psc)
{
                TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
                GPIO_InitTypeDef  GPIO_InitStructuer;
               
                TIM_DeInit(TIM2);        //初始化TIM2
                RCC_APB2PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //①时钟 TIM2 使能
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
                //定时器 TIM2 初始化
                GPIO_InitStructuer.GPIO_Pin=GPIO_Pin_0;
                GPIO_InitStructuer.GPIO_Mode=GPIO_Mode_IN_FLOATING;
                GPIO_InitStructuer.GPIO_Speed=GPIO_Speed_50MHz;
                GPIO_Init(GPIOA,&GPIO_InitStructuer);
               
                TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值
                TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟频率除数的预分频值
                TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
                TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数
                TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //②初始化 TIM2
                TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted, 0);//不使用采样滤波  外部时钟模式2
       
}

void TIM2_ON(void)
{
                TIM_ClearITPendingBit(TIM2,TIM_IT_Update); //清除中断标志位,避免第一次自动进入中断一次
                TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE ); //③允许更新中断
                TIM_SetCounter(TIM2,0);//设置计数初值
                //中断优先级 NVIC 设置       
                NVIC_InitTypeDef NVIC_InitStructure;
                NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; //TIM8 中断
                NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 1 级
                NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级 3 级
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ 通道被使能
                NVIC_Init(&NVIC_InitStructure); //④初始化 NVIC 寄存器
               
                TIM_Cmd(TIM2, ENABLE); //⑤使能 TIM8
}


void TIM2_IRQHandler(void)   //TIM2计数器中断
{
                if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)  //检查TIM2更新中断发生与否
                {
                                TIM_ClearITPendingBit(TIM2, TIM_IT_Update);                  //清除TIMx更新中断标志
                                Register_over_count ++;                                                                                                                        //脉冲溢出计数
                                LED1 = ~LED1;
                }
                TIM_ClearITPendingBit(TIM2, TIM_IT_Update);                                  //清除TIMx更新中断标志
}


计数器程序参考的网上的,结果计数器完全没进过中断,PA0口的示波器信号量了没有问题。




捕获.PNG (15.58 KB, 下载次数: 11)

捕获.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:385318 发表于 2018-10-28 10:14 | 只看该作者
把tim2的初始化放在while(1)的外面
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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