stm32f107时钟配置和滴答定时器遇到问题

2019-08-20 18:27发布




上图是stm32f107的时钟树,请问系统滴答定时器的时钟来源只有HCLK或者HCLK八分频么?
因为我做了一个实验,就是改变system clock,发现系统滴答定时器不受影响,而Tim2受影响。HCLK来自system clock这样说应该没错吧。那么system clock改变了为什么与HCLK相关的系统滴答定时器没收到影响呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
XUZJWWSZ
2019-08-21 07:43
在新的板子上没有25M晶体了,我只好用20M晶体代替,原来的例程里是25/5*8/5*9=72。我换了晶体之后用20/4*8/5*9=72不就行了么。于是我对下面代码做了更改:
原来是:
RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
                              RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
                             RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);

更改之后是:
RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
                              RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV4 | RCC_CFGR2_PLL2MUL8 |
                             RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);


只是把第二段的RCC_CFGR2_PREDIV2_DIV5换成了RCC_CFGR2_PREDIV2_DIV4,程序下载后tim2定时器准确工作,说明获得了72Mhz的system clock。
但是滴答定时器却不准了。延时10ms变成了延时12.5ms。这不刚好是20M与25M的比例么!
也就是说系统滴答定时器绕过system clock直接受到了外部晶体HSE的影响,是在不理解是为什么,还是我前面的推断哪里出错了。

一周热门 更多>