この記事は、kNの魏の将軍から再生された
「外部水晶クロックSTM32の変更を構成する方法」
STM32デフォルトのライブラリがケース8M外部水晶で実装されているので、周波数を含む8Mにより、シリアルポートのボーレートを設定するための時間です。
2)stm32f10x.h日時:
外部水晶12M場合、クロック72MHZに配置されました 。
1)PLL周波数
そのようなAの変化:
8N:
RCC-> CFGR | =(のuint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); // 8 * 9 = 72
12M:
RCC-> CFGR | =(のuint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); // 12 * 6 = 72
12M:
RCC-> CFGR | =(のuint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL6); // 12 * 6 = 72
ライブラリ機能:無効RCC_PLLConfig(RCC_PLLSourceのuint32_t、RCC_PLLMulのuint32_t)
例:RCC_PLLConfig(RCC_PLLSource_HSE_Div1、RCC_PLLMul_6)。
2)stm32f10x.h日時:
8N:
#define HSE_Value((のuint32_t)8000000)/ * <ヘルツでの外部発振器の値* /!
12M:
12M:
#define HSE_Value((のuint32_t)12000000)/ *!<ヘルツでの外部発振器の値* /
そして、内部クロックの話を、内部クロックがRC発振器の精度によって生成さは高くありません。電力が小さく、内部クロックによって生成され、また、次のようにプログラムが構成され、PCBスペースを節約します。
空RCC_Configuration(無効)
{
(デバッグ目的のために)/ * RCCのシステムリセット* /
RCC_DeInit();
RCC_HSICmd(ENABLE); //内部高速クロックを開きます
// HSIの準備ができて待って
一方、(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET)。
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //オープンFLASHのプリフェッチ機能
// FLASHタイミング制御
//推奨:SYSCLK = 0〜24MHzのレイテンシ= 0
// SYSCLK = 24〜48MHzのレイテンシ= 1
// SYSCLK = 48〜72MHzレイテンシ= 2
FLASH_SetLatency(FLASH_Latency_2)。
RCC_HCLKConfig(RCC_SYSCLK_Div1); //セットHCLK(AHBクロック)= SYSCLK
RCC_PCLK2Config(RCC_HCLK_Div1)。// PCLK2(APB2)= HCLK
RCC_PCLK1Config(RCC_HCLK_Div1); //PCLK1(APB1) = HCLK
//PLL设置 SYSCLK/2 * 12 = 4*12 = 48MHz
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_12);
//启动PLL
RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,不能被DISABLE
//等待PLL稳定
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){;}
//设置系统时钟SYSCLK = PLL输出
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//等待PLL成功用作于系统时钟的时钟源,并等待稳定
// 0x00:HSI作为系统时钟
// 0x04:HSE作为系统时钟
// 0x08:PLL作为系统时钟
while(RCC_GetSYSCLKSource() != 0x08);
}
还有如果修给了
HSE_Value ,但是还有问题,则库文件使用的是LIB文件,而不是C文件。现在看来是stm32f10x_rcc.c转LIB时的问题。它里面把HSE_VALUE编译成死的了,不跟头文件走。
所以,如果库文件使用的是LIB文件,那么改晶振频率后就需要把stm32f10x_rcc.c加到工程里一起编译。
所以,如果库文件使用的是LIB文件,那么改晶振频率后就需要把stm32f10x_rcc.c加到工程里一起编译。