STM32时钟设置
一、使用外部时钟,并设置为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时钟设置的更多相关文章
- stm32时钟设置函数
这里涉及到一个很重要的寄存器,时钟配置寄存器:RCC_CFGR #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defin ...
- STM32的系统时钟设置SystemClock_Config()探究
一.首先了解几个硬件名词: stm32有多种时钟源,为HSE.HSI.LSE.LSI.PLL,对于L系统的,还有一个专门的MSI 1.HSE是高速外部时钟,一般8M的晶振,精度比较高,比较稳定. 2. ...
- STM32内部时钟设置-寄存器版
STM32寄存器版本——内部时钟设置 同时要记得把延时初始化函数设置好 //系统时钟初始化函数 //pll:选择的倍频数,从2开始,最大值为16 //pll:选择的倍频数,这里使用内部时钟,PLL为4 ...
- STM32时钟理解
转载自 http://blog.sina.com.cn/s/blog_6ebd49350100q6xw.html STM32时钟理解 一.硬件上的连接问题 如果使用内部RC振荡器而不使用外部晶振,请按 ...
- stm32时钟分析
转载自http://blog.chinaunix.net/uid-21658993-id-3129667.html 在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. 其实是 ...
- STM32时钟系统
一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率 ...
- stm32 时钟配置——外部时钟倍频、内部时钟倍频 【worldsing笔记】
stm32可选的时钟源 在STM32中,可以用内部时钟,也可以用外部时钟,在要求进度高的应用场合最好用外部晶体震荡器,内部时钟存在一定的精度误差. 准确的来说有4个时钟源可以选分别是HSI.LSI.H ...
- STM32时钟配置方法详解
一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源, ...
- STM32时钟配置方法
一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率 ...
随机推荐
- loj#2333 「JOI 2017 Final」准高速电车
分析 我们发现到达一个点一定是先快车再准快车再慢车 于是快车将1-n分为多个区间 每次取出每个区间当前能到达的点的数量 选剩余时间贡献最大的的一个取得贡献并且再能到达的最远点建立准快车 代码 #inc ...
- Vue-数据绑定原理
VueJS 使用 ES5 提供的 Object.defineProperty() 方法实现数据绑定. 感觉实现时主要是在 defineProperty 的 set 和 get 上做了很多文章,在 ge ...
- Nginx 配置 location 以及 return、rewrite 和 try_files 指令
正则表达式 Nginx 内置的全局变量 location 前缀字符串及优先级 示例 location 匹配原则 if 和 break 指令 if break return.rewrite 和 try_ ...
- 16/7/11_PHP-PHP异常处理
抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被执行. 既然抛出异常会中断程序执行,那么为什么 ...
- java web中各种context的关系
我举得这篇文章解决了我的很多疑惑,理清了我以前不太清楚的Context关系,读懂这篇文章很有助于理解源码, 原文链接在这里:https://www.jianshu.com/p/2537e2fec546 ...
- linux + eclipse + cdt 报错undefined reference......好麻烦的,这位大牛给出的方法可行,特此MARK!!!!
http://bbs.csdn.net/topics/390239632 kerosun kerosun 等级: 结帖率:96.92% 楼主 发表于: 2012-10-11 12:00:51 比如 ...
- iintellij IDEA运行环境使用教程
1.官网:https://www.jetbrains.com 链接: https://pan.baidu.com/s/10QKLn1bGEW9W0pXEp6WR1A 提取码: vt2b 看官觉得有用留 ...
- [SDOI2019]快速查询
[SDOI2019]快速查询 [题目链接] 链接 [思路要点] 据说是 \(\text{SDOI2019}\) 最水的题 操作次数为 \(1e7\) 范围,显然要求每次操作 \(\mathcal{O} ...
- struts框架的一些注意点
1.Struts.xml文件中<include file="">标签的运用 用法:此标签引用配置文件,Struts2提供了一个默认的struts.xml文件,当此配置文 ...
- [LeetCode] 182.查找重复的电子邮箱
编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. 示例: +----+---------+ | Id | Email | +----+---------+ | 1 | a@b.co ...