STM32_05_时钟树
时钟
d用来输入数据,CLK就是我们的时钟,CPU1s中72000000HZ个时钟周期
STM32的时钟树
锁相环
HSE时钟源
HSI时钟源
LSE时钟源
LSI时钟源
SystemInit函数
SetSysClock函数
SetSysClockTo72函数
SystemInit()后时钟频率大小
总结
RCC标准库函数
定义变量a,判断其【n】是否为0
让a,第n位和1做位与,其他位和0做位与,判断按位与结果,
结果为0,[n] = 0
结果非0,[n] = 1
实战演练-掌控需求
LED位置
硬件设计
LED0软件实现
代码示例(时钟树配置):
main.c:
// main.c
#include "stm32f10x.h"
#include "led.h"
#include "beep.h"
#include "system.h"// 时钟树配置
// 参数1:div 参数2:pllm
void RCC_HSE_Config(u32 div, u32 pllm){// 1.设置为默认值RCC_DeInit();// 2.打开HSE时钟RCC_HSEConfig(RCC_HSE_ON);// 3.等待HSE起振if(RCC_WaitForHSEStartUp() == SUCCESS){// 4.配置AHB 不分频RCC_HCLKConfig(RCC_SYSCLK_Div1);// 5.配置APB1 2分频RCC_PCLK1Config(RCC_HCLK_Div2);// 6.配置APB2 不分频RCC_PCLK2Config(RCC_HCLK_Div1);// 7.配置PLL时钟源:div 倍频系数:pllm//RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);RCC_PLLConfig(div,pllm);// 8.使能PLLRCC_PLLCmd(ENABLE);// 9.循环判断PLL是否生效while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);// 10.配置SYSCLK的时钟源为PLLRCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);}
}// 位带只是对输入/输出做优化,和初始化无关
int main(void){// 配置时钟树// pll时钟源:HSE 倍频系数:9 PLLCLK=SYSCLK=72MHzRCC_HSE_Config(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);// pll时钟源:HSE/2 倍频系数:9 PLLCLK=SYSCLK=36MHz//RCC_HSE_Config(RCC_PLLSource_HSE_Div2,RCC_PLLMul_9);// pll时钟源:HSE 倍频系数:9 PLLCLK=SYSCLK=128MHz// 长时间超频是不行的,系统不稳定//RCC_HSE_Config(RCC_PLLSource_HSE_Div1,RCC_PLLMul_16);// LED初始化LED_Init();BEEP_Init();while(1){// 循环开关灯 + 蜂鸣器LED0 = !LED0;// 1 - 0 - 1LED1 = !LED1;BEEP = !BEEP;delay(0xfffff);}
}