单片机时钟配置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,烧录直接失败!


烧录不了。

相关推荐
HQB20269 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
果壳science11 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
南山电子nscn11 小时前
中科芯CETC汽车电池管理系统BMS进口芯片国产型号替代指南
单片机·汽车·bms
桀人12 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
国科安芯13 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C13 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
传感器与混合集成电路13 小时前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc14 小时前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
碧海银沙音频科技研究院14 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
恒锐丰科技林技术员15 小时前
EG1160 高压半桥驱动芯片:高压功率变换的实用驱动方案
经验分享·嵌入式硬件·硬件工程