STM32F10X硬件8MHz改为24MHz软件配置修改方法

发布者:骄阳少年最新更新时间:2018-10-13 来源: eefocus关键字:STM32F10X  软件配置  修改方法 手机看文章 扫描二维码
随时随地手机看文章

1、单片机为STM32F103最快运行速度72MHz,系统默认使用8MHz外部时钟晶振,如果硬件采用24MHz晶振,软件就需要修改时钟配置,修改方法如下,我们用的硬件为STM32F10X_MD,并不是STM32F10X_CL,在static void SetSysClockTo72(void)函数中:
#ifdef STM32F10X_CL
    // Configure PLLs ------------------------------------------------------
    // PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz
    // PREDIV1 configuration: PREDIV1CLK = PLL2 / 5 = 8 MHz
       
    RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
                              RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
    RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
                             RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV5);
 
    // Enable PLL2
    RCC->CR |= RCC_CR_PLL2ON;
    // Wait till PLL2 is ready
    while((RCC->CR & RCC_CR_PLL2RDY) == 0)
    {
    }
 
    // PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz 
    RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
                            RCC_CFGR_PLLMULL9);
#else   
    //  PLL configuration: PLLCLK = HSE * 9 = 72 MHz
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    //RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL3);
#endif // STM32F10X_CL


2、单片机为STM32F100最快运行速度24MHz,系统默认使用8MHz外部时钟晶振,如果硬件采用24MHz晶振,软件就需要修改时钟配置,修改方法如下,我们用的硬件为STM32F10X_MD_VL,并不是STM32F10X_CL,在static void SetSysClockTo24(void)函数中:
#ifdef STM32F10X_CL
    // Configure PLLs ------------------------------------------------------
    // PLL configuration: PLLCLK = PREDIV1 * 6 = 24 MHz 
    RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
                            RCC_CFGR_PLLMULL6);

    // PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz
    // PREDIV1 configuration: PREDIV1CLK = PLL2 / 10 = 4 MHz       
    RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
                              RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
    RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV5 | RCC_CFGR2_PLL2MUL8 |
                             RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV10);
 
    // Enable PLL2
    RCC->CR |= RCC_CR_PLL2ON;
    // Wait till PLL2 is ready
    while((RCC->CR & RCC_CR_PLL2RDY) == 0)
    {
    }  
#elif defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
    //  PLL configuration:  = (HSE / 2) * 6 = 24 MHz
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
    //RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLMULL6);  //8MHz外部晶振
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLMULL3);    //24MHz外部晶振
#else   
    //  PLL configuration:  = (HSE / 2) * 6 = 24 MHz
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
    //RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL6);          //8MHz外部晶振
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLXTPRE_HSE_Div2 | RCC_CFGR_PLLMULL3);            //24MHz外部晶振
#endif // STM32F10X_CL


3、修改MDK编译环境
     把原本编译STM32F103的keil工程修改为STM32F100的工程需要修改工程配置,如下:
STM32F10X硬件8MHz改为24MHz软件配置修改方法


STM32F10X硬件8MHz改为24MHz软件配置修改方法

关键字:STM32F10X  软件配置  修改方法 引用地址:STM32F10X硬件8MHz改为24MHz软件配置修改方法

上一篇:stm32库函数在gcc下的开发环境配置完成
下一篇:Linux下如何搭建stm32开发环境(一)

推荐阅读最新更新时间:2024-03-16 16:16

u8,u16,u32和uint8_t,uint16_t,uint32_t的含义
ST库里面的宏定义,定义如下: #define __I volatile const /*! defines 'read only' permissions */ #define __O volatile /*! defines 'write only' permissions */ #define __IO volatile /*! defines 'read / write' permissions */ typedef unsigned int uint32_t; typedef
[单片机]
STM32F10X时钟系统学习笔记
根据这个图片来解释时钟系统 1. STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。   ③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。   ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。   ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 2.系统时钟SYSCLK可来源于三个时钟源: ①、HSI振荡器时钟 ②
[单片机]
<font color='red'>STM32F10X</font>时钟系统学习笔记
STM32F10X SysTick小教程
前言: SysTick就是STM32 的系统滴答,SysTick的最大使命,就是定期地产生异常请求,作为系统的时基。一般的可以用来作延时,当然了还可以用来计时。 对于它的通俗讲法就是,周期性的的系统中断,滴答滴答的。接下来,我们就以他的为基础做简单延时函数的教程。 这里我用的开发板时正点原子的MiniSTM32,芯片型号为STM32F103RCT6. This is easy, so you can do that very easily! view plain copy ***REMENBER STM32 is you! :) 我们在这里进行通俗的讲解,详细的内容,可以在以后再去看STM32手册。 代
[单片机]
STM32F10x 学习笔记之USART实现串口通讯
STM32F10x 系列单片机中都包含了USART 模块,所谓USART,就是通用同步异步收发器。通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。 从前面的介绍可知USART模块功能非常的强大。这里我只简单讲讲如何用USART模块来实现标准EIA-232 串口通讯。 用过单片机的人肯定都接触过串口,设置串口无非就是设置波特率、数据位、停止位、奇偶校验位。发送接收也就三种
[单片机]
<font color='red'>STM32F10x</font> 学习笔记之USART实现串口通讯
STM32F10X时钟系统学习笔记
根据这个图片来解释时钟系统 STM32 有5个时钟源:HSI、HSE、LSI、LSE、PLL。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz,精度不高。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。   ③、LSI是低速内部时钟,RC振荡器,频率为40kHz,提供低功耗时钟。   ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。   ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 2.系统时钟SYSCLK可来源于三个时钟源: ①、HSI振荡器时钟 ②、
[单片机]
<font color='red'>STM32F10X</font>时钟系统学习笔记
STC原版EEPROM修改方法
12.4 .EEPROM测试程序(C程序及汇编程序) 1. C程序: ;STC 12C5A60S2系列单片机EEPROM/IAP 功能测试程序演示 /*------------------------------------------------------------------------------------*/ /* --- STC MCU Limited ---------------- ---------------------------------------*/ /* --- 演示STC 1T 系列单片机 EEPROM/IAP 功能--------------------------*/ /* --- Mobi
[单片机]
【STM32】1—零基础硬件软件配置 & 完成LED的闪烁
1 基础准备 1.1 硬件准备 首先,我们需要用四根杜邦线完成开发板与下载器的连接。 连接方式:DAPLINK上的3V3、SWD、SCK、GND,分别通过杜邦线与开发板上的VCC、SWDIO、SWCLK、GND相连。 对于驱动问题,若是使用Win10、Win11系统,则无需安装驱动,即插即用。在数据线插上电脑USB接口后,可从电脑设备管理器找到。 1.2 软件准备 打开STM32CubeMX,打开MCU SELECTOR,搜索并选中芯片STM32F407VET6: 时钟源配置(时钟树配置参看文章开头的两篇博客): GPIO引脚配置: ① 初始化输出电
[单片机]
【STM32】1—零基础硬件<font color='red'>软件</font><font color='red'>配置</font> & 完成LED的闪烁
STM32F10x 学习笔记3之CRC计算单元
STM32F 系列的单片机内部带了CRC32 计算单元。这个内置CRC模块的方法使用非常简单。其操作如下图所示。 图 1 CRC计算单元框图 归纳起来有如下几步操作: 1. 开启CRC单元的时钟。RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE) 2. 复位CRC模块(设置CRC_CR=0x01),这个操作把CRC余数初始化为0xFFFFFFFF 3. 把要计算的数据按逐个地写入CRC_DR寄存器 4. 写完所有的数据字后,从CRC_DR寄存器读出计算的结果 STM32F10x StdPeriph Driver 中提供了几个函数。 CRC_ResetDR(void)
[单片机]
<font color='red'>STM32F10x</font> 学习笔记3之CRC计算单元
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved