一、使用外部时钟,并设置为72MHz

void SetSysClockToHSE(void)
{
ErrorStatus HSEStartUpStatus;
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/
/* RCC system reset(for debug purpose) */
RCC_DeInit(); /* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON); //SYSCLK = 8M /* Disenable LSE */
RCC_LSEConfig(RCC_LSE_OFF); /* Wait till HSE is ready */
HSEStartUpStatus = RCC_WaitForHSEStartUp(); if (HSEStartUpStatus == SUCCESS)
{
/* HCLK = SYSCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB /* PCLK2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1); //High Speed APB /* PCLK1 = HCLK */
RCC_PCLK1Config(RCC_HCLK_Div2); //Low Speed APB /* Flash 0 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/*Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* PLLCLK = 8MHz*9 = 72MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Select HSE as system clock source */
// RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); /* Enable PLL */
RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till PLL is used as system clock source */
while (RCC_GetSYSCLKSource() != 0x08)
{ }
} else {
/* If HSE fails to start-up, the application will have wrong clock configuration.
User can add here some code to deal with this error */ /* Go to infinite loop */
while ()
{
}
}
}

还有之前原子里寄存器版本

char SysClock;

void MYRCC_DeInit(void)
{
RCC->APB1RSTR = 0x00000000;//¸´Î»½áÊø
RCC->APB2RSTR = 0x00000000; RCC->AHBENR = 0x00000014; //˯ÃßģʽÉÁ´æºÍSRAMʱÖÓʹÄÜ.ÆäËû¹Ø±Õ.
RCC->APB2ENR = 0x00000000; //ÍâÉèʱÖӹرÕ.
RCC->APB1ENR = 0x00000000;
RCC->CR |= 0x00000001; //ʹÄÜÄÚ²¿¸ßËÙʱÖÓHSION
RCC->CFGR &= 0xF8FF0000; //¸´Î»SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]
RCC->CR &= 0xFEF6FFFF; //¸´Î»HSEON,CSSON,PLLON
RCC->CR &= 0xFFFBFFFF; //¸´Î»HSEBYP
RCC->CFGR &= 0xFF80FFFF; //¸´Î»PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE
RCC->CIR = 0x00000000; //¹Ø±ÕËùÓÐÖжÏ
} char SystemClock_HSE(u8 PLL)
{
unsigned char temp=;
MYRCC_DeInit(); //¸´Î»²¢ÅäÖÃÏòÁ¿±í
RCC->CR|=<<; //Íⲿ¸ßËÙʱÖÓʹÄÜHSEON
while(!(RCC->CR>>));//µÈ´ýÍⲿʱÖÓ¾ÍÐ÷
RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
PLL-=;//µÖÏû2¸öµ¥Î»
RCC->CFGR|=PLL<<; //ÉèÖÃPLLÖµ 2~16
RCC->CFGR|=<<; //PLLSRC ON
FLASH->ACR|=0x32; //FLASH 2¸öÑÓʱÖÜÆÚ
RCC->CR|=0x01000000; //PLLON
while(!(RCC->CR>>));//µÈ´ýPLLËø¶¨
RCC->CFGR|=0x00000002;//PLL×÷ΪϵͳʱÖÓ
while(temp!=0x02) //µÈ´ýPLL×÷ΪϵͳʱÖÓÉèÖóɹ¦
{
temp=RCC->CFGR>>;
temp&=0x03;
} SysClock=(PLL+)*;
return SysClock;
}

二、systick定时器设置

/***********SysTick*****************/
// cycles per microsecond
static volatile uint32_t usTicks = ;
// current uptime for 1kHz systick timer. Will rollover after 49 days. hopefully we won't care.
uint32_t sysTickUptime = ; void cycleCounterInit(void)
{
RCC_ClocksTypeDef clocks;
RCC_GetClocksFreq(&clocks);
usTicks = clocks.SYSCLK_Frequency/;
} // SysTick
void SysTick_Handler(void)
{
sysTickUptime++;
}
void DelayMs(uint16_t nms)
{
uint32_t t0=micros();
while(micros() - t0 < nms * );
} void delay_us(u32 nus)
{
uint32_t t0=micros();
while(micros() - t0 < nus);
} void delay_ms(uint16_t nms)
{
uint32_t t0=micros();
while(micros() - t0 < nms * );
} // Return system uptime in microseconds (rollover in 70minutes)
// return us
uint32_t micros(void)
{
register uint32_t ms, cycle_cnt;
do {
ms = sysTickUptime;
cycle_cnt = SysTick->VAL;
} while (ms != sysTickUptime);
return (ms * ) + (usTicks * - cycle_cnt) / usTicks;
}

main中使用

    cycleCounterInit();
SysTick_Config(SystemCoreClock / );

STM32时钟设置的更多相关文章

  1. stm32时钟设置函数

    这里涉及到一个很重要的寄存器,时钟配置寄存器:RCC_CFGR #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defin ...

  2. STM32的系统时钟设置SystemClock_Config()探究

    一.首先了解几个硬件名词: stm32有多种时钟源,为HSE.HSI.LSE.LSI.PLL,对于L系统的,还有一个专门的MSI 1.HSE是高速外部时钟,一般8M的晶振,精度比较高,比较稳定. 2. ...

  3. STM32内部时钟设置-寄存器版

    STM32寄存器版本——内部时钟设置 同时要记得把延时初始化函数设置好 //系统时钟初始化函数 //pll:选择的倍频数,从2开始,最大值为16 //pll:选择的倍频数,这里使用内部时钟,PLL为4 ...

  4. STM32时钟理解

    转载自 http://blog.sina.com.cn/s/blog_6ebd49350100q6xw.html STM32时钟理解 一.硬件上的连接问题 如果使用内部RC振荡器而不使用外部晶振,请按 ...

  5. stm32时钟分析

    转载自http://blog.chinaunix.net/uid-21658993-id-3129667.html   在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. 其实是 ...

  6. STM32时钟系统

    一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率 ...

  7. stm32 时钟配置——外部时钟倍频、内部时钟倍频 【worldsing笔记】

    stm32可选的时钟源 在STM32中,可以用内部时钟,也可以用外部时钟,在要求进度高的应用场合最好用外部晶体震荡器,内部时钟存在一定的精度误差. 准确的来说有4个时钟源可以选分别是HSI.LSI.H ...

  8. STM32时钟配置方法详解

      一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源, ...

  9. STM32时钟配置方法

    一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率 ...

随机推荐

  1. elasticsearch安装分词插件

    在常用的中文分词器.拼音分词器.繁简体转换插件.国内用的就多的分别是:elasticsearch-analysis-ikelasticsearch-analysis-pinyinelasticsear ...

  2. redhat 修改yum源

    问题现象: 现有的yum安装git失败,提示yum源连接失败 Error Downloading Packages: git--.el6_4..x86_64: failure: Packages/gi ...

  3. 关闭myeclipse中烦人的鼠标划过,自动提示功能

    eclipse越来越智能,身为码农的我却越来越伤心.虽然你很智能,但请你提供一些有用的信息给我,不要乱七八槽的,不问青红皂白就塞一大堆提示给我,对不起,哥不需要这些!!! 都知道,使用myeclips ...

  4. Wildfly安装以及集成idea(mac)

    文章目录 Linux发布运行 下载 集成idea Linux发布运行 首先说一下在linux环境,只需要将war包上传到wildfly-8.2.0.Final/standalone/deploymen ...

  5. PHP 调试 - Xdebug

    PHP 调试指南.pdf PHP 程序员的调试技术 根据要调试的对象的不同,采取的方法也不一样: 调试 web 应用:对于 web 应用,可以在浏览器中安装插件,或者在 IDE 中设置,下面的设置二选 ...

  6. 使用 GitLab 的 OAuth2 认证服务

    原文地址 本文档讲述如何使用 GitLab 作为 OAuth 认证服务提供商,以通过 GitLab 的 OAuth 认证登录其他服务(例如持续集成工具 Drone). 如果想使用其他 OAuth 身份 ...

  7. IntelliJ IDEA 2018 2.X破解

    一 下载idea 官网 :https://www.jetbrains.com/idea/ 二 下载破解包 IntelliJ IDEA 2018.1.X--2.X(2.6可用,图就不改了) 链接: ht ...

  8. servlet--三大域

    requset  \ session   servletContext  application

  9. servlet--context域

    ServletContext(重要) 一个项目只有一个ServletContext对象! 我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据! 与天地同寿!! ...

  10. Netty核心组件介绍及手写简易版Tomcat

    Netty是什么: 异步事件驱动框架,用于快速开发高i性能服务端和客户端 封装了JDK底层BIO和NIO模型,提供高度可用的API 自带编码解码器解决拆包粘包问题,用户只用关心业务逻辑 精心设计的Re ...