单片机时钟配置01

MCU:STM32F407

一、不配置时钟

cpp 复制代码
int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    delay_init(168);                    /* 延时初始化 */
    led_init();                         /* 初始化LED */
	g_RCC_CR=RCC->CR;
	g_RCC_PLLCFGR=RCC->PLLCFGR;
	g_RCC_CFGR=RCC->CFGR;
	g_RCC_CIR=RCC->CIR;
	g_RCC_AHB1RSTR=RCC->AHB1RSTR;
	g_RCC_AHB2RSTR=RCC->AHB2RSTR;
	g_RCC_AHB3RSTR=RCC->AHB3RSTR;
	g_RCC_APB1RSTR=RCC->APB1RSTR;
	g_RCC_APB2RSTR=RCC->APB2RSTR;
	g_RCC_AHB1ENR=RCC->AHB1ENR;
	g_RCC_AHB2ENR=RCC->AHB2ENR;
	g_RCC_AHB3ENR=RCC->AHB3ENR;
	g_RCC_APB1ENR=RCC->APB1ENR;
	g_RCC_APB2ENR=RCC->APB2ENR;
	g_RCC_APB1LPENR=RCC->APB1LPENR;
	g_RCC_APB2LPENR=RCC->APB2LPENR;
	g_RCC_AHB1LPENR=RCC->AHB1LPENR;
	g_RCC_AHB2LPENR=RCC->AHB2LPENR;
	g_RCC_AHB3LPENR=RCC->AHB3LPENR;
	g_RCC_BDCR=RCC->BDCR;
	g_RCC_CSR=RCC->CSR;
	g_RCC_SSCGR=RCC->SSCGR;
	g_RCC_PLLI2SCFGR=RCC->PLLI2SCFGR;    
    while(1)
    {
				g_nnum++;
    }
}

二、配置时钟

cpp 复制代码
int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
//    sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */
		sys_stm32_clock_init(192, 4, 4, 2); /* 设置时钟,168Mhz */
    delay_init(168);                    /* 延时初始化 */
    led_init();                         /* 初始化LED */
    
	g_RCC_CR=RCC->CR;
	g_RCC_PLLCFGR=RCC->PLLCFGR;
	g_RCC_CFGR=RCC->CFGR;
	g_RCC_CIR=RCC->CIR;
	g_RCC_AHB1RSTR=RCC->AHB1RSTR;
	g_RCC_AHB2RSTR=RCC->AHB2RSTR;
	g_RCC_AHB3RSTR=RCC->AHB3RSTR;
	g_RCC_APB1RSTR=RCC->APB1RSTR;
	g_RCC_APB2RSTR=RCC->APB2RSTR;
	g_RCC_AHB1ENR=RCC->AHB1ENR;
	g_RCC_AHB2ENR=RCC->AHB2ENR;
	g_RCC_AHB3ENR=RCC->AHB3ENR;
	g_RCC_APB1ENR=RCC->APB1ENR;
	g_RCC_APB2ENR=RCC->APB2ENR;
	g_RCC_APB1LPENR=RCC->APB1LPENR;
	g_RCC_APB2LPENR=RCC->APB2LPENR;
	g_RCC_AHB1LPENR=RCC->AHB1LPENR;
	g_RCC_AHB2LPENR=RCC->AHB2LPENR;
	g_RCC_AHB3LPENR=RCC->AHB3LPENR;
	g_RCC_BDCR=RCC->BDCR;
	g_RCC_CSR=RCC->CSR;
	g_RCC_SSCGR=RCC->SSCGR;
	g_RCC_PLLI2SCFGR=RCC->PLLI2SCFGR;
    while(1)
    {
				g_nnum++;
    }
}

sys_stm32_clock_init(192, 4, 4, 2);的原型是

uint8_t sys_stm32_clock_init(uint32_t plln, uint32_t pllm, uint32_t pllp, uint32_t pllq)

其中plln的选择:

VCO 输出频率 = VCO 输入频率 × PLLN 并且 192  PLLN  432,

VCO 输出频率介于 192 和 432 MHz 之间

pllm的选择:VCO 输入频率 = PLL 输入时钟频率 / PLLM 并且 2  PLLM  63,VCO 输入频率介于 1 和 2 MHz 之间。

对于外部晶振为8MHz,pllm只能是8或4.其它值均不成功。

pllp的选择:PLL 输出时钟频率 = VCO 频率 / PLLP 并且 PLLP = 2、4、6 或 8

不超过 168 MHz

pplq的选择:USB OTG FS 时钟频率 = VCO 频率 / PLLQ,并且 2  PLLQ 15

pllm=4,则VCO输入频率为2MHz;

plln=192,则VCO的输出频率为384

pllp=4,则PLL的输出频率为384/4=96MHZ

即SystemCoreClock=96MHz

三、pllm=4时,可以配置几个频率呢?

先不考虑USB OTG FS 时钟频率,如果pllp=2,则时钟会超出168MHz,但是成功。

cpp 复制代码
int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
		sys_stm32_clock_init(192, 4, 2, 2); /* 设置时钟,168Mhz */
    delay_init(168);                    /* 延时初始化 */
    led_init();                         /* 初始化LED */
    
	g_RCC_CR=RCC->CR;
	g_RCC_PLLCFGR=RCC->PLLCFGR;
	g_RCC_CFGR=RCC->CFGR;
	g_RCC_CIR=RCC->CIR;
	g_RCC_AHB1RSTR=RCC->AHB1RSTR;
	g_RCC_AHB2RSTR=RCC->AHB2RSTR;
	g_RCC_AHB3RSTR=RCC->AHB3RSTR;
	g_RCC_APB1RSTR=RCC->APB1RSTR;
	g_RCC_APB2RSTR=RCC->APB2RSTR;
	g_RCC_AHB1ENR=RCC->AHB1ENR;
	g_RCC_AHB2ENR=RCC->AHB2ENR;
	g_RCC_AHB3ENR=RCC->AHB3ENR;
	g_RCC_APB1ENR=RCC->APB1ENR;
	g_RCC_APB2ENR=RCC->APB2ENR;
	g_RCC_APB1LPENR=RCC->APB1LPENR;
	g_RCC_APB2LPENR=RCC->APB2LPENR;
	g_RCC_AHB1LPENR=RCC->AHB1LPENR;
	g_RCC_AHB2LPENR=RCC->AHB2LPENR;
	g_RCC_AHB3LPENR=RCC->AHB3LPENR;
	g_RCC_BDCR=RCC->BDCR;
	g_RCC_CSR=RCC->CSR;
	g_RCC_SSCGR=RCC->SSCGR;
	g_RCC_PLLI2SCFGR=RCC->PLLI2SCFGR;
	
	
    while(1)
    {
				g_nnum++;
    }
}
cpp 复制代码
int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
		sys_stm32_clock_init(193, 4, 2, 2); /* 设置时钟,168Mhz */
    delay_init(168);                    /* 延时初始化 */
    led_init();                         /* 初始化LED */
    
	g_RCC_CR=RCC->CR;
	g_RCC_PLLCFGR=RCC->PLLCFGR;
	g_RCC_CFGR=RCC->CFGR;
	g_RCC_CIR=RCC->CIR;
	g_RCC_AHB1RSTR=RCC->AHB1RSTR;
	g_RCC_AHB2RSTR=RCC->AHB2RSTR;
	g_RCC_AHB3RSTR=RCC->AHB3RSTR;
	g_RCC_APB1RSTR=RCC->APB1RSTR;
	g_RCC_APB2RSTR=RCC->APB2RSTR;
	g_RCC_AHB1ENR=RCC->AHB1ENR;
	g_RCC_AHB2ENR=RCC->AHB2ENR;
	g_RCC_AHB3ENR=RCC->AHB3ENR;
	g_RCC_APB1ENR=RCC->APB1ENR;
	g_RCC_APB2ENR=RCC->APB2ENR;
	g_RCC_APB1LPENR=RCC->APB1LPENR;
	g_RCC_APB2LPENR=RCC->APB2LPENR;
	g_RCC_AHB1LPENR=RCC->AHB1LPENR;
	g_RCC_AHB2LPENR=RCC->AHB2LPENR;
	g_RCC_AHB3LPENR=RCC->AHB3LPENR;
	g_RCC_BDCR=RCC->BDCR;
	g_RCC_CSR=RCC->CSR;
	g_RCC_SSCGR=RCC->SSCGR;
	g_RCC_PLLI2SCFGR=RCC->PLLI2SCFGR;
    while(1)
    {
				g_nnum++;
    }
}
cpp 复制代码
int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
		sys_stm32_clock_init(432, 4, 2, 2); /* 设置时钟,168Mhz */
    delay_init(168);                    /* 延时初始化 */
    led_init();                         /* 初始化LED */
    
	g_RCC_CR=RCC->CR;
	g_RCC_PLLCFGR=RCC->PLLCFGR;
	g_RCC_CFGR=RCC->CFGR;
	g_RCC_CIR=RCC->CIR;
	g_RCC_AHB1RSTR=RCC->AHB1RSTR;
	g_RCC_AHB2RSTR=RCC->AHB2RSTR;
	g_RCC_AHB3RSTR=RCC->AHB3RSTR;
	g_RCC_APB1RSTR=RCC->APB1RSTR;
	g_RCC_APB2RSTR=RCC->APB2RSTR;
	g_RCC_AHB1ENR=RCC->AHB1ENR;
	g_RCC_AHB2ENR=RCC->AHB2ENR;
	g_RCC_AHB3ENR=RCC->AHB3ENR;
	g_RCC_APB1ENR=RCC->APB1ENR;
	g_RCC_APB2ENR=RCC->APB2ENR;
	g_RCC_APB1LPENR=RCC->APB1LPENR;
	g_RCC_APB2LPENR=RCC->APB2LPENR;
	g_RCC_AHB1LPENR=RCC->AHB1LPENR;
	g_RCC_AHB2LPENR=RCC->AHB2LPENR;
	g_RCC_AHB3LPENR=RCC->AHB3LPENR;
	g_RCC_BDCR=RCC->BDCR;
	g_RCC_CSR=RCC->CSR;
	g_RCC_SSCGR=RCC->SSCGR;
	g_RCC_PLLI2SCFGR=RCC->PLLI2SCFGR;
	
	
    while(1)
    {
				g_nnum++;
    }
}

PLLN设置为最大值432,则时钟设置为432MHz,烧录直接失败!


烧录不了。

相关推荐
天空'之城4 小时前
单片机基础核心知识点汇总(三十四)
单片机·嵌入式硬件
Horn Still Sounds5 小时前
51单片机入门:硬件基础、位运算、数码管动态显示完整梳理
嵌入式硬件·mongodb·51单片机
三佛科技-187366133975 小时前
24W-48W隔离双绕组非标自供电芯片LP3718CD(电路原理图)
单片机·嵌入式硬件
糖糖单片机设计7 小时前
基于 STM32 的小型鸟类宠物繁殖系统
stm32·嵌入式硬件·宠物
电子元器件选型哥9 小时前
一文讲清LLC谐振电路工作原理
单片机·嵌入式硬件·硬件工程师·电子元器件·器件选型
HUI-47410 小时前
EG1162|SOP‑16 高压同步整流降压控制器,最高 600V 输入,大电流 5V 输出优选
嵌入式硬件·硬件工程
POMAGTOR10 小时前
【5G 通讯 POGOPIN 弹簧顶针连接器解决方案】
网络·嵌入式硬件·5g
ZLG_zhiyuan10 小时前
测试方案 | 从“000”到“111”,高效完成100BASE-TX以太网眼图测试
单片机·嵌入式硬件
恒锐丰科技林技术员10 小时前
EG1198:120V 宽压内置 MOS 降压 DC‑DC 电源芯片解析
经验分享·嵌入式硬件·硬件工程
数字新视界11 小时前
能耗管理系统的综合方案与优化实战解析
嵌入式硬件·物联网·数据中心·数据中心基础设施管理·dcim管理系统