時鐘? ? ? ? ? ?
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);}
}