看到你们这样说,我去仔细看了参考手册,果然如你们所说,在互联型中,PLLMUL最大值为9,16倍的1111被当作了保留。
我在程序中,仍然采用了1111作为赋值,即仍然把PLLMUL写成16倍。
结果的确为64MHz,
1. 选择HCLK/8为Systick,这里64/8=8MHz,重装值是8000000,即把中断一次的时间设为1s,实测中断时间的确为1秒。
u32 ENMASK = 0x00000003;
u32 CLKMASK = 0x00000006;
SysTick->CTRL &= ~ENMASK; //关闭寄存器,关闭中断使能
SysTick->CTRL &= ~CLKMASK; //选择HCLK/8为Systick,这里64/8=8MHz
SysTick->LOAD = SYSTICKPERIOD; //重装值是8000000,即把中断一次的时间设为1s
SysTick->VAL = ((u32)0x00000000); //Var清零,产生1个事件,更新Load的值
SysTick->CTRL |= ENMASK; //启动SysTick,开启中断使能
NVIC_SetPriority(SysTick_IRQn, 0x04); //优先级分组为2,抢占式优先级为1,次优先级为0
2. TIM1的TIM_TimeBaseStructure.TIM_Period 设为255,输出模式为PWM2,最后示波器测量输出频率为250kHz。
综上所述,仍然为64MHz。
我的程序是为stm32f103写的,当时不知道互联型的最大频率限制。后来为了使用重映射的spi3,不得不换到了f107,程序没有改动,昨天刚发现频率36MHz的限制,结果验证时却发现仍然是64MHz。
我本心是希望107能够工作在64MHz的。
|