[应用相关] 关于STM32高级定时器配置为外部时钟模式2的问题

[复制链接]
2720|6
 楼主| 拉克丝 发表于 2017-2-26 17:06 | 显示全部楼层 |阅读模式
各位好!我想用STM32F103RBT6(也就是ALIENTEK MiniSTM32)的高级定时器1测外部计数的个数。采用外部时钟模式2.现代码如下:
            RCC_APB1PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能  
           TIM_DeInit(TIM1);        //配置TM1为计数器
           TIM_TimeBaseStructure.TIM_Period = 0xFFFF;                 //计数器自动装载值为0xFFFF
        TIM_TimeBaseStructure.TIM_Prescaler = 0x00;          //不分频
        TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;          //不滤波
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;           //向上计数
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
        //设置TM1为外部时钟模式2
        TIM_ETRClockMode2Config(TIM1, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);
        TIM_SetCounter(TIM1, 0);         //清除计数器值
        TIM_Cmd(TIM1, ENABLE);                 //开启计数
端口PA12已经配置为GPIO_Mode_IN_FLOATING。板的PA12虽已被上拉,用示波器能得到很好的方波。
然后另一定时器定时器的中断到来时度出TIM1_CNT值。另外用TIM2的外部时钟模式2能读出TIM2_CNT值。可是TIM1_CNT总为0!
请问错在那里了?
309030 发表于 2017-2-26 17:18 | 显示全部楼层
定时器通道设置了吗? TIM1_CNT总为0就是没启动,pA12初始化了吗?
迪卡 发表于 2017-2-26 17:46 | 显示全部楼层
RCC_APB1PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
米尔豪斯 发表于 2017-2-26 17:57 | 显示全部楼层
楼主,我的问题和你差不多
TIM1和TIM8不行,换成TIM2就可以,一样的配置。
lefeng 发表于 2017-2-26 18:11 | 显示全部楼层
请注射定时器时钟总线的定义: RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能  
feelhyq 发表于 2017-2-27 09:13 | 显示全部楼层
既然你的自动装载值为 最大0xFFFFFF  : TIM_TimeBaseStructure.TIM_Period = 0xFFFF;                 //计数器自动装载值为0xFFFF

那么你的  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;           //向上计数

其中的向上计数应该改成向下计数才合理  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;           //向下计数
ST 虽然提供了库函数,但那些都只是一个demo,  更多的还需要开发者自己去推敲
xmshao 发表于 2017-2-27 12:05 | 显示全部楼层
TIM1和TIM2的时钟不一样。前者在APB2总线,后者在APB1总线上。
按照你现有配置,TIM2是没问题,

TIM1的话,时钟配置要改为跟上面5楼描述的一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

150

主题

920

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部