一、使用外部时钟,并设置为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. innobackupex对MySQL做热备份,报错mysql库下数据字典表损坏

    [root@node1 op]#mysql -Vmysql Ver 14.14 Distrib 5.6.29innobackupex热备份MySQL报错,报错信息:[root@node1 op]#in ...

  2. VS2017中英文切换

    离线安装完成, --fix 检查下是否完整 安装时没有勾选的项, 可以下次再补安装 安装时出现缺少*.vsix 如:microsoft.visualstudio.webtoolsextensions. ...

  3. Share架构的一些心得

    个人这些年,从web->system service->app 项目实战,陆陆续续经历的项目很多,自己也数不清.自己也一直对于架构没有明确去给出一个自己的定义描述. 刚好最近一直在flut ...

  4. python脚本-上传apk至蒲公英

    import requests import os #账号配置信息 url = "https://upload.pgyer.com/apiv1/app/upload" uKey = ...

  5. (appium+python)UI自动化_09_unittest批量运行测试用例&生成测试报告

    前言 上篇文章[(appium+python)UI自动化_08_unittest编写测试用例]讲到如何使用unittets编写测试用例,并执行测试文件.接下来讲解下unittest如何批量执行测试文件 ...

  6. Naive Bayes Algorithm And Laplace Smoothing

    朴素贝叶斯算法(Naive Bayes)适用于在Training Set中,输入X和输出Y都是离散型的情况.如果输入X为连续,输出Y为离散,我们考虑使用逻辑回归(Logistic Regression ...

  7. JavaScript高级程序设计(第3版) 第三章 (基本概念)

    3.1 语法 1.不以数字开头的数字,字母,下划线,美元符号 2.注释:html <!-- --> css/**/ js单行// 多行/**/ 3.ES5 引入了严格模式(strict m ...

  8. 通过JS,用a标签代替form中的submit

    ---恢复内容开始--- 有时候在使用表单的时候,不一定会用到表单中的input_submit来提交表单数据,可能会用a.button等来代替 然后自然而然地想到了用JS中的提交表单数据的动作 < ...

  9. android 学习路线

    转载来源:https://blog.csdn.net/lixuce1234/article/details/77947405 jixiaohua发了一篇一个老鸟也发了一份他给公司内部小伙伴整理的路线图 ...

  10. Codeforces 1110F(DFS序+线段树)

    题面 传送门 分析 next_id = 1 id = array of length n filled with -1 visited = array of length n filled with ...