在定时器中断中,
#include "timer.h"
#include "led.h"
//通用定时器 3 中断初始化
//这里时钟选择为 APB1 的 2 倍,而 APB1 为 36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器 3!
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //①时钟 TIM3 使能
//定时器 TIM3 初始化
TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
上面这一句话,APB1最大频率是36Mhz,这个在初始化的时候就已经设置了的,如果用库函数默认就是36Mhz,在main函数运行前就设置了,一般可以不管。
默认是36MHZ,那么现在是 APB1 的 2 倍,这个去哪里设置这个APB1预分频系数。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; 在SetSysClockTo72() 函数里
---------------------------------
这个我知道,我现在APB1(*1/*2) -- CK_PSC(/n)--CK_INT ,我现在想知道前面APB1的预分频系统是哪里设置,哪个库函数,APB1预分频系数通过CFGR寄存器的PPRE1几个位来决定,但是原子代码没有只是一笔带过//这里时钟选择为 APB1 的 2 倍,而 APB1 为 36M ,这个我想知道是在哪里设置
---------------------------------
通过库函数可以找到,AHB时钟设置成72MHz,然后设置APB1预分频系数为2,这样APB1时钟为36MHz,因为APB1预分频系数为2,不是1,所以给TIM2~7的时钟为APB1时钟的2倍,就是72MHz啦
一周热门 更多>