时钟配置

1、概述

F407的内部时钟有LSI(32Hz)、HSI(16MHz)
外部时钟有 HSE 25MHz,用外部时钟比较稳定。
用HSE时钟配置系统时钟如下
25Mhz,通过PLL倍频,作为PllClk和PLL48CLK时钟,(m分频因子一般为HSE大小:配置为输入VCO为1MHz,XN倍频为输出VCO =336Mhz,通过分频因子p(=2)和R(=7)给外部总线提供时钟,ABB(HCLK)=168,APB1总线为42Hz、APB2总线为84Hz,定时器时钟是APB总线时钟2倍,)

2、时钟配置总结

/*

  • 使用 HSE 时,设置系统时钟的步骤
  • 1、开启 HSE ,并等待 HSE 稳定
  • 2、设置 AHB、 APB2、 APB1 的预分频因子
  • 3、设置 PLL 的时钟来源
  • 设置 VCO 输入时钟 分频因子 m
  • 设置 VCO 输出时钟 倍频因子 n
  • 设置 PLLCLK 时钟分频因子 p
  • 设置 OTG FS,SDIO,RNG 时钟分频因子 q
  • 4、开启 PLL,并等待 PLL 稳定
  • 5、把 PLLCK 切换为系统时钟 SYSCLK
  • 6、读取时钟切换状态位,确保 PLLCLK 被选为系统时钟
  • m: VCO 输入时钟 分频因子,取值 2~63
  • n: VCO 输出时钟 倍频因子,取值 192~432
  • p: PLLCLK 时钟分频因子 ,取值 2, 4, 6, 8
  • q: OTG FS,SDIO,RNG 时钟分频因子,取值 4~15
  • 函数调用举例,使用 HSE 设置时钟
  • SYSCLK=HCLK=168M,PCLK2=HCLK/2=84M,PCLK1=HCLK/4=42M
    */

3、用寄存器编程

void hseCfg(void)
{
/*****************************************************************************/
/
PLL (clocked by HSE) used as System clock source /
/
****************************************************************************/
__IO uint32_t StartUpCounter = 0, HSEStatus = 0;
/
复位RCC的所有寄存器 */
RCC_DeInit();
RCC->CR |=(uint32_t)RCC_CR_HSEON;//使能HSE时钟
// 下面是等着硬件自动设置CR寄存器为HSERDY为1表示HSE时钟就绪
do
{
HSEStatus=RCC->CR & RCC_CR_HSERDY;
StartUpCounter++;
}while((HSEStatus==0)&&(StartUpCounter!=HSE_STARTUP_TIMEOUT));

if((RCC->CR & RCC_CR_HSERDY)!=RESET)
{HSEStatus=0x1;
}
else
{HSEStatus=0x0;
}
if(HSEStatus==0x1)
{/* Select regulator voltage output Scale 1 mode *//* 选择电压调节器的模式为1,用来平衡电压,减低功耗 */RCC->APB1ENR |= RCC_APB1ENR_PWREN;PWR->CR |= PWR_CR_VOS; /* 给系统各总线分频AHB 分频为1APB1 分频为4APB1 分频为2
*/RCC->CFGR |=RCC_CFGR_HPRE_DIV1;RCC->CFGR |=RCC_CFGR_PPRE1_DIV4;RCC->CFGR |=RCC_CFGR_PPRE2_DIV2;

/* PLL倍频* RCC_PLLCFGR_PLLSRC_HSE 作为系统时钟/
RCC->PLLCFGR = 25 | (336 << 6) | (((2 >> 1) -1) << 16) |
(RCC_PLLCFGR_PLLSRC_HSE) | (7 << 24);
/* Enable the main PLL /
/
使能主PLL /
RCC->CR |= RCC_CR_PLLON;
/
Wait till the main PLL is ready /
/
等待主PLL稳定 */
while((RCC->CR & RCC_CR_PLLRDY) == 0)
{

    }/* Configure Flash prefetch, Instruction cache, Data cache and wait state *//* 配置FLASH预取指,指令缓存,数据缓存,等待周期 */FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;RCC->CFGR &=~(RCC_CFGR_SW);RCC->CFGR |=RCC_CFGR_SW_PLL;//选择PLL作为系统时钟while((RCC->CFGR &(uint32_t)RCC_CFGR_SWS_PLL) !=RCC_CFGR_SWS_PLL){}//等待PLL就绪,有硬件设置
}
else
{异常做其他处理
}

}

4、用固件库编程

void HseCFg(uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ)
{
ErrorStatus errorStatus=ERROR;
RCC_DeInit(); /* 复位RCC的所有寄存器 */
RCC_HSEConfig(RCC_HSE_ON);//使能HSE时钟
// 下面是等着硬件自动设置CR寄存器为HSERDY为1表示HSE时钟就绪
errorStatus=RCC_WaitForHSEStartUp();

if(errorStatus==SUCCESS)
{/* 给系统各总线分频AHB 分频为1APB1 分频为4APB1 分频为2
*/RCC_HCLKConfig(RCC_SYSCLK_Div1);RCC_PCLK1Config(RCC_HCLK_Div4);RCC_PCLK2Config(RCC_HCLK_Div2);/* PLL倍频*      RCC_PLLCFGR_PLLSRC_HSE 作为系统时钟/RCC_PLLConfig(RCC_PLLSource_HSE, PLLM,  PLLN,  PLLP,  PLLQ);RCC_PLLCmd(ENABLE);//用的位带操作,给寄存器X位置1while((RCC->CR & RCC_CR_PLLRDY) == 0)
{}/* Configure Flash prefetch, Instruction cache, Data cache and wait state *//* 配置FLASH预取指,指令缓存,数据缓存,等待周期 */
FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);while((RCC->CFGR &(uint32_t)RCC_CFGR_SWS_PLL) !=RCC_CFGR_SWS_PLL)
{
}
}
else
{
}

}

5、HSI配置为系统时钟

void HSIFun(uint32_t PLLM, uint32_t PLLN, uint32_t PLLP, uint32_t PLLQ)
{

  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;

// ErrorStatus errorStatus=ERROR;
/* 复位RCC的所有寄存器 */
RCC_DeInit();
RCC->CR |=(uint32_t)RCC_CR_HSION;
do
{
HSEStatus=RCC->CR & RCC_CR_HSIRDY;
StartUpCounter++;
}while((HSEStatus==0)&&(StartUpCounter!=HSE_STARTUP_TIMEOUT));
if((RCC->CR & RCC_CR_HSIRDY)==RCC_CR_HSIRDY)
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div4);
RCC_PCLK2Config(RCC_HCLK_Div2);

 RCC_PLLConfig(RCC_PLLSource_HSI, PLLM,  PLLN,  PLLP,  PLLQ);RCC_PLLCmd(ENABLE);while((RCC->CR & RCC_CR_PLLRDY) == 0)
{
}/* Configure Flash prefetch, Instruction cache, Data cache and wait state *//* 配置FLASH预取指,指令缓存,数据缓存,等待周期 */
FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS;RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);while((RCC->CFGR &(uint32_t)RCC_CFGR_SWS_PLL) !=RCC_CFGR_SWS_PLL)
{
}
}
else
{}

}

Stm32F04 时钟配置相关推荐

  1. STM32的时钟配置随笔

    以前使用STM32都是使用库函数开发,最近心血来潮想要使用寄存器来试试手感,于是乎便在工作之余研究了一下STM32F4的时钟配置,在此将经历过程写下来作为锻炼,同时也供和我一样的新手参考,如有错误或者 ...

  2. 华大单片机HC32L136J8TA读取DS18B20温度(源码+时钟配置)

    免费的C语言和linuxPDF文档:传送门 有一点C语言基础和华大单片机开发经验,应该就能看得懂就不多介绍了,有疑问可以留言,看到就回了; 关于协议具体解析:传送门@不脱发的程序猿 注(2021-05 ...

  3. STM32的时钟配置——时钟树解析

    此文章由于讲得较详细因此篇幅较长,请带着一点耐心去读,相信会有收获! 目录 STM32为什么要有复杂的时钟系统 详解STM32时钟系统 STM32有几个时钟源 关于时钟输出 软件配置时钟 STM32为 ...

  4. NXP(I.MX6uLL)DDR3实验——DDR3重要时间参数、时钟配置与原理图简析

    目录 DDR3 内存时间参数 传输速率 tRCD 参数 CL 参数 AL 参数 tRC 参数 tRAS 参数 I.MX6U MMDC内存控制器简介 MMDC内存控制器简介 MMDC内存控制器信号引脚 ...

  5. STM32 RCC时钟配置

    STM32 RCC时钟配置 时钟源 外部高速晶振HSE,通常是8MHz. 内部高速晶振HSI,8MHz. 外部低速晶振LSE,32.768KHz. 内部低速晶振LSI,40KHz. 时钟源选择 通常使 ...

  6. stm32时钟配置总结

    stm32时钟配置时钟源: 1,HSE(高速外部时钟)即常见的外接8M晶振方案: 2,HSI(高速内部时钟) 即8M内部振荡时钟方案: 3,LSE(低速外部时钟)即常见的32.768Khz晶振方案: ...

  7. 火牛单片机rtc时钟配置_怎么用STM32F103RTC进行时钟的配置

    #include "sys.h" #include "delay.h" #include "usart.h" #include " ...

  8. DSP28377s系统时钟配置注意事项

    DSP28377s系统时钟配置注意事项 问题一脸嫣然的向我们走来... 近日,一个兄弟在配置基于28377s芯片的主控系统时钟时,遇到点困难. 具体是这样的,原来的主控板使用的是20MHz外部晶振,为 ...

  9. 如何修改IMX6UL开发板时钟配置?

    启扬i.MX6UL开发板时钟由24Mhz与32.768Khz晶振提供,这里不具体介绍NXP公司整体的时钟规划,只从软件API接口方面去分析如何去修改一个外设的时钟. 接下来的讲解将以CAN总线的时钟为 ...

最新文章

  1. FeignClientAutoConfiguration
  2. C语言 | 卡尔曼滤波算法2——算法分析
  3. python中re_Python中re(正则表达式)模块学习
  4. HDU 1542 Atlantis 线段树+离散化+扫描线
  5. 分治法求两个等长升序序列的联合中位数
  6. ON_EVENT 报错
  7. 第二个Arduino小车 两轮自平衡
  8. 中国气象数据网的.nc数据批量下载(Python代码)
  9. java导出文件放到压缩包里
  10. Win10隐藏图标怎么恢复
  11. 简易打折,输入数量金额然后计算打折
  12. js刻度尺插件_html5 canvas+js刻度尺代码
  13. linux sh文件执行情况,Linux下SH执行
  14. 博尔德大学计算机专业本科,2020美国大学计算机专业本科排名
  15. 【小样本分割】PFENet
  16. 测试/开发程序员幽默的 “自嘲“?印象流派......
  17. python爬虫天气实例_Python爬虫实例扒取2345天气预报
  18. nginx配置ip黑名单
  19. java教程(三)初识J2ee十三个规范
  20. iOS Odyssey 和 unc0ver 的区别

热门文章

  1. 为什么需要传递HINSTANCE给CreateWindow?
  2. faiss search(检索)截断
  3. PyQt5 实现矩阵计算器
  4. 新一代全空间智能GIS平台 MapGIS 10.6即将发布!
  5. 这些阻碍程序员升职加薪的行为,你中招了几个?
  6. 艾美捷ALC-0159基本参数文献参考
  7. Rust简短笔记:原始指针(Raw Pointer)
  8. VScode 自定义主题颜色
  9. 字符串中汉字和数字转换成拼音
  10. 14行列式03---克拉默法则、非齐次与齐交线性方程组