历史上的今天

今天是:2024年08月29日(星期四)

正在发生

2019年08月29日 | STM32F429 >> 6. RCC-使用HSE, HSI 配置时钟

发布者:以泉换泉 来源: eefocus关键字:STM32F429  RCC  用HSE  HSI  配置时钟 手机看文章 扫描二维码
随时随地手机看文章

本工程板级支持包文件适用于野火stm32f429 开发板。


在这里插入图片描述

编程要点

开启HSE/HSI,并等待HSE/HSI 稳定

设置AHB, APB2, APB1 的预分频因子

设置PLL 的时钟来源,设置VCO 输入时钟分频因子PLL_M,设置VCO 输出时钟倍频因子PLL_N,设置PLLCLK 时钟分频因子PLL_P,设置OTGFS, SDIO, RNG 时钟分频因子PLL_Q

开启PLL,并等待PLL 稳定

把PLLCLK 切换为系统时钟SYSCLK

读取时钟切换状态位,确保PLLCLK 被选为系统时钟

bsp_clk.c

/**

  ******************************************************************************

  * @file    bsp_clk.c

  * @author  Waao

  * @version V1.0.0

  * @date    21-Dec-2018

  * @brief   This file contains some board support package's functions for the CLK.

  *            

  ******************************************************************************

  * @attention

  *

  * None

*

  ******************************************************************************

  */


#include


/**

  * @brief  Initialize the SYSCLK powered by HSE

  * @note   None

  * @param  m: VOC input clock's frequency division factor.  

* n: VOC output clock's frequency doubling factor.

* p: PLLCLK clock's frequency division factor.

* q: OTG, FS, SDIO and RNG clock's frequency division factor.

  * @retval None

  */

void HSE_SetSysClock(uint32_t m, uint32_t n, uint32_t p, uint32_t q)

{

__IO uint32_t HSEStartUpStatus = 0;

//Enable the HSE, open the external crystal oscillator

RCC_HSEConfig(RCC_HSE_ON);

//Waiting the HSE to be stable

HSEStartUpStatus = RCC_WaitForHSEStartUp();

if(HSEStartUpStatus == SUCCESS)

{

RCC->APB1ENR |= RCC_APB1ENR_PWREN;

PWR->CR |= PWR_CR_VOS;

//HCLK = SYSCLK / 1

RCC_HCLKConfig(RCC_SYSCLK_Div1);

//PCLK2 = HCLK / 2

RCC_PCLK2Config(RCC_HCLK_Div2);

//PCLK1 = HCLK / 4

RCC_PCLK1Config(RCC_HCLK_Div4);

//Configure the PLL

RCC_PLLConfig(RCC_PLLSource_HSE, m, n, p, q);

//Enable the PLL

RCC_PLLCmd(ENABLE);

//Waiting the PLL to be stable

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

{

}

/*--------------------------------------------*/

//Open the OVER-RIDE mode to reach a higher frequency

PWR->CR |= PWR_CR_ODEN;

while((PWR->CSR & PWR_CSR_ODRDY) == 0)

{

}

PWR->CR |= PWR_CR_ODSWEN;

while((PWR->CSR & PWR_CSR_ODSWRDY) == 0)

{

}

//Configure the FLASH

FLASH->ACR = FLASH_ACR_PRFTEN

|FLASH_ACR_ICEN

|FLASH_ACR_DCEN

|FLASH_ACR_LATENCY_5WS;

/*---------------------------------------------*/

//Change the clock of the PLL to SYSCLK when PLL to be stable

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

while(RCC_GetSYSCLKSource() != 0x08)

{

}

}

else

{

while(1)

{

}

}

}



/**

  * @brief  Initialize the SYSCLK powered by HSI

  * @note   None

  * @param  m: VOC input clock's frequency division factor.  

* n: VOC output clock's frequency doubling factor.

* p: PLLCLK clock's frequency division factor.

* q: OTG, FS, SDIO and RNG clock's frequency division factor.

  * @retval None

  */

void HSI_SetSysClock(uint32_t m, uint32_t n, uint32_t p, uint32_t q)

{

__IO uint32_t HSIStartUpStatus = 0;

//Initialize the RCC parameter to reset status

RCC_DeInit();

//Enable the HSI, HSI=16M

RCC_HSICmd(ENABLE);

//Waiting the HSI to be ready

HSIStartUpStatus = RCC->CR & RCC_CR_HSIRDY;

//Continue to run only when the HSI to be ready

if(HSIStartUpStatus == RCC_CR_HSIRDY)

{

RCC->APB1ENR |= RCC_APB1ENR_PWREN;

PWR->CR |= PWR_CR_VOS;

//HCLK = SYSCLK / 1

RCC_HCLKConfig(RCC_SYSCLK_Div1);

//PCLK2 = HCLK / 2

RCC_PCLK2Config(RCC_HCLK_Div2);

//PCLK1 = HCLK / 4

RCC_PCLK1Config(RCC_HCLK_Div4);

//Configure the PLL

RCC_PLLConfig(RCC_PLLSource_HSI, m, n, p, q);

//Enable the PLL

RCC_PLLCmd(ENABLE);

//Waiting the PLL to be stable

while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

{

}

/*--------------------------------------------*/

//Open the OVER-RIDE mode to reach a higher frequency

PWR->CR |= PWR_CR_ODEN;

while((PWR->CSR & PWR_CSR_ODRDY) == 0)

{

}

PWR->CR |= PWR_CR_ODSWEN;

while((PWR->CSR & PWR_CSR_ODSWRDY) == 0)

{

}

//Configure the FLASH

FLASH->ACR = FLASH_ACR_PRFTEN

|FLASH_ACR_ICEN

|FLASH_ACR_DCEN

|FLASH_ACR_LATENCY_5WS;

/*---------------------------------------------*/

//Change the clock of the PLL to SYSCLK when PLL to be stable

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

while(RCC_GetSYSCLKSource() != 0x08)

{

}

}

else

{

while(1)

{

}

}

}



/**

  * @brief  Configure the MCO1 output the clock signal

  * @note   None

  * @param  None  

  * @retval None

  */

void MCO1_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(MCO1_CLK_PORT, ENABLE);

GPIO_InitStructure.GPIO_Pin = MCO1_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_Init(MCO1_PORT, &GPIO_InitStructure);

}


/**

  * @brief  Configure the MCO2 output the clock signal

  * @note   None

  * @param  None  

  * @retval None

  */

void MCO2_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(MCO2_CLK_PORT, ENABLE);

GPIO_InitStructure.GPIO_Pin = MCO2_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

GPIO_Init(MCO2_PORT, &GPIO_InitStructure);

}



bsp_clk.h

/**

  ******************************************************************************

  * @file    bsp_clk.h

  * @author  Waao

  * @version V1.0.0

  * @date    21-Dec-2018

  * @brief   This file contains some board support package's definition for the CLK.

  *            

  ******************************************************************************

  * @attention

  *

  * None

*

  ******************************************************************************

  */

#ifndef __BSP_LED_H_

#define __BSP_LED_H_



#include


#define PLL_M 25

#define PLL_N 360

#define PLL_P 2

#define PLL_Q 7


#define MCO1_PIN       GPIO_Pin_8

#define MCO1_PORT      GPIOA

#define MCO1_CLK_PORT  RCC_AHB1Periph_GPIOA


#define MCO2_PIN       GPIO_Pin_9

#define MCO2_PORT      GPIOC

#define MCO2_CLK_PORT  RCC_AHB1Periph_GPIOC


void HSE_SetSysClock(uint32_t m, uint32_t n, uint32_t p, uint32_t q);

void HSI_SetSysClock(uint32_t m, uint32_t n, uint32_t p, uint32_t q);

void MCO1_GPIO_Config(void);

void MCO2_GPIO_Config(void);



#endif

关键字:STM32F429  RCC  用HSE  HSI  配置时钟 引用地址:STM32F429 >> 6. RCC-使用HSE, HSI 配置时钟

上一篇:STM32F429 >> 5. 按键控制LED 开关
下一篇:STM32F429 >> 7. 中断

推荐阅读

   资策会MIC表示,今年科技市场最大的不确定因素还是iPhone与中美贸易战,而随着商用换机潮结束、厂商态度保守与中美贸易战影响,明年PC与半导体成长率恐将低于今年。而在5G方面,MIC估计第一波商机将在2020年发酵,2021年5G手机出货量将会显著增加至超过1亿支。MIC表示,今年受惠于PC商用换机潮,台湾业者不仅NB出货量预期将达1.3亿台,几乎与去年持...
近期,备受业界关注的2019年度“中国银行股份有限公司UPS选型项目采购”和“中国农业银行中低功率UPS等品目入围采购项目”尘埃落定,台达UPS产品凭借强大的品牌实力,以及领先的技术、服务和应用综合优势全部成功入围,再次体现了台达品牌在技术领域强大的产品研发和服务保障能力,也代表着银行业对台达UPS产品能力的认可与肯定。 银行业UPS采购项目前期考...
8月28日,第三届集微政策峰会在厦门海沧举行。为了给参会企业提供一个全面展示的平台,本届峰会首次设立了特色展区,合肥高新区展台格外让人瞩目。合肥高新区是首批国家级高新区之一,是安徽省集成电路战略性新兴产业基地,2019年基地实现产值284亿元。目前,合肥高新区已形成了人工智能、集成电路、量子信息、生物医药、公共安全等高端产业集群,拥有科大...
8月27日,合众思壮发布半年度业绩报告称,2021年上半年营业收入约9.07亿元,同比增加30.96%;归属于上市公司股东的净利润亏损约1.2亿元,较上年同期减少亏损39.05%;基本每股收益亏损0.1619元。合众思壮表示,营收同比增长主要是北斗高精度业务和北斗移动互联业务均比上年同期大幅增加;净利润同比减少亏损主要由于产品销售收入增加及财务费用减少所致。此外,...

史海拾趣

问答坊 | AI 解惑

门铃语音片子

拆开一个旧门铃,片子上有7个引脚,接有一个三极管,两个小电容,只有“BY-1”这些字,线有些掉了,谁有这片子的图? 某接不回去了。…

查看全部问答∨

写给symbian os开发初学者

1.没有人强迫你,是你志愿选择了symbian os. 2.这是最重要的问题,开发symbian 平台的软件到底有没有前途呢?每个symbian os的开发者都在考虑这个的问题,答案很简单,问问市场就知道了,只要你做的是精品,肯定会得到认可的。全球每年生产几亿部 ...…

查看全部问答∨

哪位大侠有51单片机控制直流电机的源程序

RTRT,本人现在在做单片机的实验,苦于对电机的一窍不通,程序无法入手啊。。。。…

查看全部问答∨

求助-双机在串行通信方式下的近距离发送和接收的程序

一、毕业论文的要求和内容 要求: 1. 掌握串行通信的基本原理。 2. 掌握RS-232的基本结构和特性。 3. 掌握8250的工作特性。 4. 掌握串行通信的硬件连接方法。 5. 查找与本课题相关的一篇外文资料,并翻译成中文。 6. 小组共同讨论,每周向指 ...…

查看全部问答∨

楼宇对讲系统安装与调试方法

一、设备安装前的准备  1、安装设备前需对系统所有线路进行全面检查,是否存在断线或短路现象;   2、确认整个系统的线路无任何故障后,方可安装设备,接线的各接点必须加上焊锡;   3、安装设备时必须严格按照产品所附说明书或安装手册进行 ...…

查看全部问答∨

MB9B506之GPIO 初探

        MB9B506之GPIO 初探                              ...…

查看全部问答∨

请教版主PowerAnts

看过你的一个关于34063的帖子,说效率可以搞到97%,甚是佩服,现在我也画了一个34063的图,请指导指导,输入5V/2A,请问输出9V,电流能达到多少? 哪个电路参数需要调整?谢谢  很多人说我加的扩流电路没必要。。。 …

查看全部问答∨

D触发器作为延时作用,modelsim仿真怎么没有效果?

求大神指教,D触发器作为延时器使用,modelsim仿真怎么没有效果?…

查看全部问答∨

FPGA&CPLD学习资料下载

FPGA&CPLD学习资料下载 …

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved