2019-08-20 18:27发布
原来问题在这里:
在设定两次中断的滴答次数之前,调用了一个获得系统时钟的函数:
在函数里面有一个外部晶振的值是事先定义好的:
它的定义位置如下图:
原来定义HSE_VALUE是25Mhz,改成20M就好了。
最多设置5个标签!
原来问题在这里:
在设定两次中断的滴答次数之前,调用了一个获得系统时钟的函数:
在函数里面有一个外部晶振的值是事先定义好的:
它的定义位置如下图:
原来定义HSE_VALUE是25Mhz,改成20M就好了。
可以确认define了STM32F10X_CL,对这段代码的更改也影响了tim2定时器,通过示波器观察到毫秒级别的明显变化。
原来是:
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的影响,是在不理解是为什么,还是我前面的推断哪里出错了。
---------------------------------
依然谢谢你,原来外部时钟的值被事先定义了。
一周热门 更多>