STM32 12M에 기본 방법 8M를 변경하는 라이브러리 systemInit 크리스탈 오실레이터

이 문서는 KN 웨이 장군에서 재현 "어떻게 외부 크리스털 클럭 STM32 변화를 구성"
STM32 기본 라이브러리의 경우 8M 외부 크리스털로 구현되기 때문에, 주파수를 포함 8M하여 직렬 포트의 전송 속도를 구성 할 때입니다.
외부 크리스탈 12M 경우 클록 72MHz 밴드에 배치  .

1) PLL 주파수 이러한 변화 :
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
도서관 기능 : 무효 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) / * <Hz에서 * / 외부의 발진기의 가치!  
12M :
#DEFINE HSE_Value ((uint32_t) 12,000,000) / * <! Hz 단위 외부 발진기의 값 * /


그런 다음 내부 시계에 대해 이야기 내부 시계가 RC 오실레이터 정확도에 의해 생성되는이 높지 않다. 전원은 또한 PCB 공간을 절약, 내부 시계 작은 의해 생성 된 다음과 같이 프로그램이 구성되어 있습니다 :
RCC_Configuration 보이드 (공극)
{
        / * (디버그 목적) RCC 시스템 재설정 * /
        () RCC_DeInit;

        RCC_HSICmd (사용); // 내부 고속 클럭을 열고
        // HSI 준비 기다립니다
        반면 (RCC_GetFlagStatus (RCC_FLAG_HSIRDY) == RESET);

        FLASH_PrefetchBufferCmd (FLASH_PrefetchBuffer_Enable) // 오픈 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加到工程里一起编译。
发布了18 篇原创文章 · 获赞 86 · 访问量 16万+

추천

출처blog.csdn.net/u013178472/article/details/76307107