打印
[STM32F1]

请教:STM32F100R8的TIM16/17定时器如何外部计数

[复制链接]
2789|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lqrscjs|  楼主 | 2014-1-22 10:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  STM32F100R8的芯片,板子做好了,管脚PB8,PB9 对应TIM16/17的CH1,用来量2路外部脉冲。
  第一次用STM32的芯片,对ARM很陌生,无中文资料,我不知如何设置寄存器,仔细看发现TM16/17没有SMCR寄存器,现在时钟来源应该是内部时钟,计数值变得非常快。
  请教如何能设置为对外部脉冲计数。代码如下,没有用中断,没有用固件库。
        RCC->APB2ENR|=3<<17;        //TIM16,17时钟使能  
        RCC->APB2ENR|=1<<3;    //使能PORTB时钟
       
        GPIOB->CRH&=0XFFFFFF00;//PB8,9
        GPIOB->CRH|=0X00000044;//浮空输入
       
          
        TIM16->ARR=0xFFFF;          //设定计数器自动重装值   
        TIM16->PSC=0;          //预分频器                  
//        TIM16->SMCR |= 7<<0; // 没有这个寄存器,不管有无这句,效果一样
        TIM16->CCMR1 |= 0x31<<0; //
        TIM16->CNT = 0;

        TIM16->CR1|=0x01;    //使能定时器16


          TIM17->ARR=0xFFFF;          //设定计数器自动重装值   
        TIM17->PSC=0;          //预分频器          
//        TIM17->SMCR |= 7<<0; //
        TIM17->CCMR1 |= 0x31<<0; //
        TIM17->CNT = 0;
        TIM17->CR1|=0x01;    //使能定时器17
沙发
airwill| | 2014-1-22 11:05 | 只看该作者
在其他的通用定时器, 通过 SMCR 来设置外部时钟.
不过 TIM16/17 没有讲得这个寄存器, 可能不支持哦

使用特权

评论回复
板凳
lqrscjs|  楼主 | 2014-1-22 13:41 | 只看该作者
airwill 发表于 2014-1-22 11:05
在其他的通用定时器, 通过 SMCR 来设置外部时钟.
不过 TIM16/17 没有讲得这个寄存器, 可能不支持哦 ...

谢谢,我再请教下,我想在程序里改用中断来计数,但是由于PB8,PB9合用一个中断函数,查询EXIT-PR能否区分是那个中断。如PB8响应中断,然后(中断还没返回),PB9发生中断,此时PR对应PB9的中断位是否会置位,还是要等到中断返回再进入时才置位?

使用特权

评论回复
地板
yang4469| | 2014-1-22 13:59 | 只看该作者
lqrscjs 发表于 2014-1-22 13:41
谢谢,我再请教下,我想在程序里改用中断来计数,但是由于PB8,PB9合用一个中断函数,查询EXIT-PR能否区分 ...

最好用两个中断来做,设定好优先级,中断次数可以分开计,同时当一个中断进行中发生了另一个中断,会根据优先级来判断执行哪一个。
发生了中断,中断位就会置位,中断处理函数必须清除相应的标志位,否则会一直执行中断函数

使用特权

评论回复
5
airwill| | 2014-1-22 15:38 | 只看该作者
lqrscjs 发表于 2014-1-22 13:41
谢谢,我再请教下,我想在程序里改用中断来计数,但是由于PB8,PB9合用一个中断函数,查询EXIT-PR能否区分 ...

我没有试过, 这个不麻烦, 看着手册在开发板上试验一下就是了.

使用特权

评论回复
6
lqrscjs|  楼主 | 2014-1-22 16:01 | 只看该作者
airwill 发表于 2014-1-22 15:38
我没有试过, 这个不麻烦, 看着手册在开发板上试验一下就是了.

谢谢,我测试过了,2个中断同时发生,无法确认是哪个。如果2个中断标志同时出现,我只清除其中一个中断标志,等它下次中断我再清另外一个就可以了。只是我的2路外部频率有些高,中断计数太耗资源了。以前用C8051F系列的,设备引脚都是排队分配的,不会有设备引脚不能用的情况,STM32是复用的,如何合理使用资源是个难题。

使用特权

评论回复
7
airwill| | 2014-1-22 17:58 | 只看该作者
不过也只好这样处理了.
频率太高, 可能会丢失脉冲. 中断优先级要设置尽可能高哦

使用特权

评论回复
8
huangfeng33| | 2014-1-22 20:13 | 只看该作者
于脉冲 频率较高, 利用通用计数器计数可能导致丢失脉冲,所以应使用高速计数器.

使用特权

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

本版积分规则

3

主题

6

帖子

1

粉丝