STM32F103的定时器时钟频率的问题,困扰了我5年,至今搞不透
我从时钟树分析一直认为,如果AHB是72M的话,APB1和APB2是72M频率,然后APB1 2分频成36M频率给PCLK1下边的外设,与此同时连接着TIM2~TIM7的倍频器由于APB1 不是1分频所以自动乘2,既TIM2~7的定时器时钟频率为72M。所以我下面的定时器配置图出来的定时器应该是1s的定时器。 但是实际测试并不是,实际出来的是2s的定时器。我时钟理解不了,难道是网上的时钟树分析都是错的? 你们是怎么理解的呢?感谢 zhao.zhao 大神的帮忙,问题解决了,问题出在时钟分频上用串了。 本帖最后由 Paderboy 于 2017-7-13 13:43 编辑
这是我从cube f103 里的时钟树截图。。 HCLK 72MHZ 经过 APB1/2得到最大36MHZ 但是 (APB1 timer) 时钟默认自动由APB1X2 所以是72MHZ
只是针对timer的。。其他APB1的外设最大时钟还是36MHZ。。。
按照以下配置,实现了1s的延时测试
我测试了,确实是1s 的延时。。。
大胆猜测了下,工作时是内部RC 36MHZ跑的。检测下时钟初始化 Paderboy 发表于 2017-7-13 13:39
这是我从cube f103 里的时钟树截图。。 HCLK 72MHZ 经过 APB1/2得到最大36MHZ 但是 (APB1 timer) 时钟默 ...
我也是用了cubemx这样配置确实是1s的定时器,但是用库函数版的就不对,这也让我下决心发帖子搞搞明白。 胡电子 发表于 2017-7-13 13:41
大胆猜测了下,工作时是内部RC 36MHZ跑的。检测下时钟初始化
这是时钟配置的截图
要石沉大海了,自己顶一下吧。 看看RCC_CFGR寄存器什么情况?
用的哪个版本的库?要不发个程序过来 我用3.1.2的库中样例程序“TimeBase”,TIM2时钟被4分频了void RCC_Configuration(void)
{
/* Setup the microcontroller system. Initialize the Embedded Flash Interface,
initialize the PLL and update the SystemFrequency variable. */
SystemInit();
/* PCLK1 = HCLK/4 */
RCC_PCLK1Config(RCC_HCLK_Div4);
/* TIM2 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* GPIOC clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
}
#define RCC_HCLK_Div4 ((uint32_t)0x00000500)
/**
* @briefConfigures the Low Speed APB clock (PCLK1).
* @paramRCC_HCLK: defines the APB1 clock divider. This clock is derived from
* the AHB clock (HCLK).
* This parameter can be one of the following values:
* @arg RCC_HCLK_Div1: APB1 clock = HCLK
* @arg RCC_HCLK_Div2: APB1 clock = HCLK/2
* @arg RCC_HCLK_Div4: APB1 clock = HCLK/4
* @arg RCC_HCLK_Div8: APB1 clock = HCLK/8
* @arg RCC_HCLK_Div16: APB1 clock = HCLK/16
* @retval None
*/
void RCC_PCLK1Config(uint32_t RCC_HCLK)
{
uint32_t tmpreg = 0;
/* Check the parameters */
assert_param(IS_RCC_PCLK(RCC_HCLK));
tmpreg = RCC->CFGR;
/* Clear PPRE1 bits */
tmpreg &= CFGR_PPRE1_Reset_Mask;
/* Set PPRE1 bits according to RCC_HCLK value */
tmpreg |= RCC_HCLK;
/* Store the new value */
RCC->CFGR = tmpreg;
}
工程的压缩包问题挺多的,TIM时钟不对,外部中断触发不了。 toofree 发表于 2017-7-14 11:14
看看RCC_CFGR寄存器什么情况?
用的哪个版本的库?要不发个程序过来
工程发了