打印
[STM32F1]

外部脉冲计数模式会和中断有冲突吗

[复制链接]
3016|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jjg809898461|  楼主 | 2013-12-18 14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用了外部脉冲计数和中断,二者都是用的TIM2通道,不知道为什么如果使能了外部计数,中断就不能使用了。
void TIM2_Configuration(void)
{
         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

         //TIM_DeInit(TIM2);
       
    /* Time base configuration */
    //这个就是自动装载的计数值,由于计数是从0开始的,计数10000次后为9999
    TIM_TimeBaseStructure.TIM_Period = 65534;
    // 这个就是预分频系数,当由于为0时表示不分频所以要减1
    TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
    // 高级应用本次不涉及。定义在定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)
    // 使用的采样频率之间的分频比例
    TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
    //向上计数
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    //初始化定时器2
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
       
          
          TIM_ETRClockMode1Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);        
       
        //TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);        
       
       
        //TIM_ETRClockMode2Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);

    TIM_SetCounter(TIM2,0);
       
          TIM_Cmd(TIM2,ENABLE);
       
        //  TIM_Cmd(TIM2,DISABLE);
               
                //TIM4 -> CCER  |= 0X0100; //开
//     TIM2->CCER &= 0XFEFF; //关
               
        }


如果屏蔽了这句TIM_ETRClockMode1Config(TIM2, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);  就能使用tim2中断了,请问各位大神这是为什么啊,有什么软件上的解决方法吗
沙发
airwill| | 2013-12-18 21:04 | 只看该作者
我怀疑, 可能是芯片设计成这样的. 软件是无法更改硬件的设计的.

使用特权

评论回复
板凳
handlike| | 2013-12-18 21:44 | 只看该作者
只有中断不用计数。在中断中给一个变量Count_Number+1计数不可以吗?

使用特权

评论回复
地板
jjg809898461|  楼主 | 2013-12-20 10:27 | 只看该作者
airwill 发表于 2013-12-18 21:04
我怀疑, 可能是芯片设计成这样的. 软件是无法更改硬件的设计的.

我更改了使用外部时钟的模式2,然后调用TIM2->SMCR&= 0XBFFF;//14位清零,禁止使用外部时钟模式2
这条语句就能使用另一个中断了,算是解决了
追加提问:nand和nor flash都能使用spi读写吗,读写方式有什么不同呢?还在学习,谢了

使用特权

评论回复
5
jjg809898461|  楼主 | 2013-12-20 10:28 | 只看该作者
handlike 发表于 2013-12-18 21:44
只有中断不用计数。在中断中给一个变量Count_Number+1计数不可以吗?

这个试过了不行哦,外部时钟模式1好像没有办法停止,最后不得已换成外部时钟模式2了,其实我不太清楚这两种模式之间的差别,就因为外部时钟模式2可停止就换他俩

使用特权

评论回复
6
jjg809898461|  楼主 | 2013-12-20 10:28 | 只看该作者
handlike 发表于 2013-12-18 21:44
只有中断不用计数。在中断中给一个变量Count_Number+1计数不可以吗?

这个试过了不行哦,外部时钟模式1好像没有办法停止,最后不得已换成外部时钟模式2了,其实我不太清楚这两种模式之间的差别,就因为外部时钟模式2可停止就换他俩

使用特权

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

本版积分规则

13

主题

71

帖子

0

粉丝