历史上的今天
返回首页

历史上的今天

今天是:2024年08月23日(星期五)

正在发生

2019年08月23日 | 【STM32F103】RCC-使用HSE/HSI配置时钟

2019-08-23 来源:eefocus

 

 

以上为STM32的时钟树,通过系统的启动文件,系统自动调用函数进行时钟初始化,所以我们在实际应用时不需要去写时钟这块,但是如果我们有特殊需求或者想要修改内部时钟的属性,则需要了解时钟树。以下以一个实验例子来测试,修改系统时钟:


1、通过HSE(高速外部时钟)来配置系统时钟:


//HSE配置系统时钟

void HSE_SetSysClk( uint32_t RCC_PLLMul_x )

{

ErrorStatus HSEStatus;

// 把RCC 寄存器复位成复位值

RCC_DeInit();

 

// 使能 HSE 

RCC_HSEConfig(RCC_HSE_ON);

HSEStatus = RCC_WaitForHSEStartUp();

if( HSEStatus == SUCCESS )

{

// 使能预取指

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

FLASH_SetLatency(FLASH_Latency_2);

RCC_HCLKConfig(RCC_SYSCLK_Div1);

RCC_PCLK1Config(RCC_HCLK_Div2);

RCC_PCLK2Config(RCC_HCLK_Div1);

// 配置 PLLCLK = HSE * RCC_PLLMul_x

    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);

    // 使能PLL

RCC_PLLCmd(ENABLE);

// 等待PLL稳定

while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET );

    // 选择系统时钟

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    while( RCC_GetSYSCLKSource() != 0x08 );

}

else

  {

/* 如果HSE 启动失败,用户可以在这里添加处理错误的代码 */

}

}

 2、HSI(高速内部时钟)来配置系统时钟


void HSI_SetSysClk( uint32_t RCC_PLLMul_x )

{

__IO uint32_t HSIStatus = 0;

// 把RCC 寄存器复位成复位值

RCC_DeInit();

 

// 使能 HSI 

RCC_HSICmd(ENABLE);

HSIStatus = RCC->CR & RCC_CR_HSIRDY;

if( HSIStatus == RCC_CR_HSIRDY )

{

// 使能预取指

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

FLASH_SetLatency(FLASH_Latency_2);

RCC_HCLKConfig(RCC_SYSCLK_Div1);

RCC_PCLK1Config(RCC_HCLK_Div2);

RCC_PCLK2Config(RCC_HCLK_Div1);

// 配置 PLLCLK = HSE * RCC_PLLMul_x

    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_x);

    // 使能PLL

RCC_PLLCmd(ENABLE);

// 等待PLL稳定

while( RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET );

    // 选择系统时钟

RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    while( RCC_GetSYSCLKSource() != 0x08 );

}

else

  {

/* 如果HSI 启动失败,用户可以在这里添加处理错误的代码 */

}

}

 3、MCO GPIO初始化,对外提供时钟输出,有条件也可以用示波器来检查该引脚(PA8)


void MCO_GPIO_Config()

{

GPIO_InitTypeDef  GPIO_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA, &GPIO_InitStruct);

}

 4、设置软件延时


void Delay( uint32_t count )

{

for(; count!=0; count--);

}

 5、主函数测试


int main(void)

{

// 来到这里的时候,系统的时钟已经被配置成72M。

//HSE_SetSysClk( RCC_PLLMul_9 );

//HSI_SetSysClk( RCC_PLLMul_16 );

MCO_GPIO_Config();

RCC_MCOConfig(RCC_MCO_SYSCLK);

//RCC_MCOConfig(RCC_MCO_HSI);

LED_GPIO_Config();

while(1)

{

LED_G(OFF);

Delay(0xFFFFF);

LED_G(ON);

Delay(0xFFFFF);

}

}

我们将之前的LED程序也放进去,因为没有示波器,通过检查LED闪烁的频率来查看MCO输出的频率,即系统时钟的频率是否得到了修改。


MCO=SYSCLK=72M时:(不需要修改程序,因为是启动文件自动调用时钟初始化获得72M时钟)


可以看到实验效果(不方便展示)是LED连续闪烁,速度很快。


MCO=HSI 且使用HSI时,时钟频率=4Mhz*RCC_PLLMul_x,这里我们取x=4,即频率=16MHz


观察到LED闪烁的速率较慢,实际用示波器还可以看的更精准,HSE就不展示了,效果一样,程序将在后续上传上来。

推荐阅读

史海拾趣

3D PLUS公司的发展小趣事

为了更好地满足客户需求,3D PLUS公司不仅提供硬件设备,还积极构建3D生态圈。公司推出了一系列3D个性化产品,包括3D全彩婚纱人像、3D梦幻水晶摆件等,这些产品独具潮流气息,深受市场欢迎。同时,公司还提供软件开发、定制开发等服务,帮助客户在移动端构建感性的3D商业场景,实现O2O移动营销的有效联动。这些举措不仅丰富了公司的产品线,也为客户提供了全方位的3D解决方案。

Apex [Apex Microtechnology]公司的发展小趣事

Apex Microtechnology凭借其卓越的产品质量和服务水平,赢得了客户的广泛认可。其中,公司连续两年获得雷神公司的5星供应商卓越奖,这一奖项是雷神公司综合防御系统业务部对供应商在质量和性能方面的最高认可。Apex Microtechnology的获奖不仅体现了其在电子行业中的领先地位,也为其未来的发展奠定了坚实的基础。

这些故事展示了Apex Microtechnology在电子行业中的发展历程和成就,体现了其在功率模拟技术领域的专业实力和不断创新的精神。作为电子行业的佼佼者,Apex Microtechnology将继续致力于为客户提供更优质的产品和服务,推动电子行业的持续发展。

全志(Allwinner)公司的发展小趣事

近年来,全志科技积极寻求与其他行业的合作,共同推进技术的创新和应用。例如,全志与安克创新建立了战略合作伙伴关系,在AI技术在智能硬件领域的创新研究、落地应用和推广方面展开了深入合作。这种合作模式不仅提升了全志的科技实力和市场影响力,也为公司的未来发展注入了新的活力。

以上五个故事分别展示了全志科技在创始与崛起、技术突破与市场认可、抓住市场风口、产品线拓展与战略转型以及合作与共赢等方面的发展历程。这些故事共同构成了全志科技在电子行业中的成长轨迹,也展示了其在面对市场挑战和机遇时的应对策略和决心。

国芯佳品公司的发展小趣事

全志科技在早期以电源管理IC AXP系列和多媒体解码F系列芯片为核心技术,成功挖掘了第一桶金。特别是在播放器等中小企业需求市场中,全志的产品获得了广泛认可。这种对市场需求的敏锐洞察和扎实的技术研发能力,使得全志在激烈的市场竞争中脱颖而出。

D3 Semiconductor公司的发展小趣事

作为一家以技术创新为核心竞争力的公司,D3 Semiconductor始终保持对新技术、新应用的关注和研究。公司不断投入研发资源,推出了一系列具有创新性的半导体产品,满足了市场的多样化需求。这种持续创新的精神推动了D3 Semiconductor的不断发展,也使其在竞争激烈的电子行业中保持领先地位。

功得(CONQUER)公司的发展小趣事

为了保持在行业中的领先地位,功得公司不断加大技术研发投入。他们与多所高校和科研机构建立合作关系,共同开展前沿技术研究。在这些合作中,功得公司取得了一系列技术突破,推出了一系列具有行业领先水平的新产品。这些技术成果不仅提升了公司的核心竞争力,也为整个电子行业的发展做出了贡献。

问答坊 | AI 解惑

有谁有鉴相器的资料?有卖的不?

正弦波信号射频频率范围4-30MHZ,输入信号VPP…

查看全部问答>

[资料] 背光及照明用LED驱动IC技术

[资料] 背光及照明用LED驱动IC技术…

查看全部问答>

eboot 启动问题。

我用的是nboot+eboot启动,下面是输信息。请高手指点一下。 \\par Mini(4k) NandBoot V2.0. [2007-09-28] \\par \\par \\par NAND Boot Start \\par NAND Boot End \\par Boot time=nTCNT*82uS. nTCNT=0x052f. \\par I/O Strength Max \ ...…

查看全部问答>

高手帮忙,在CE上的Bluetooth问题

在CE上Bluetooth设置PIN问题 我用的SDK是STANDARDSDK_500,可是这SDK里没有Btdrt.lib,因此找了个Btdrt.lib 但是在使用BthGetPINRequest()、BthSetPIN()函数还是不能用 可能是手动加入的Btdrt.lib关连到其它的LIB,这要如何解决? 或者谁做的,你 ...…

查看全部问答>

wince6.0 是否支持SHLoadImageResource?

请各位帮帮忙看看! 我在windows moible 5.0 上使用SHLoadImageResource是可以的 而在wince6.0上 却找不到SHLoadImageResource 是不是wince6.0 不支持 SHLoadImageResource? …

查看全部问答>

转让一些板子(已结束)

1.    ok6410 买来2.3个月,具体我也不知道了。装了android系统后当时间看看。没真正开发过。720元。 2.    lm3s8962 申请来的。芯片太贵,放弃学习。248元。加钱换cc2530板子最好,我有无限龙3700元那个套件的光盘 ...…

查看全部问答>

关于自加,自减,和标准输出

#include <stdio.h> void main() {   int x=3,y;     y=––x+––x+x++;     printf(\"x=%d   y=%d\\n\",x,y);  } x=2,y=3     不懂 ??????? &n ...…

查看全部问答>

有关IAP使用HEX或BIN文件格式的探讨

BIN优点,下载时二进制传输效率高,一个起始地址和长度(均可事先知道)搞定.因起始地址和长度在 下载一开始就可以知道,所以只需要擦除实际代码大小的FLASH,避免大FLASH空间小代码时擦除FLASH的时间和FLASH损耗. 缺点:当代码分段在不同地址时,如 ...…

查看全部问答>

STM8S105PA1脚不能设置为上拉输入

STM8S105  PA1脚不能设置为上拉输入,是什么原因?? PA2脚都可以设置为上拉输入;…

查看全部问答>

智能家居的技术

用zigbee技术做智能家居已经快六年了, 而且也用了zigbee技术作了些抄表系统。 最近突然有个想法,就是利用PLC(power line communication 电线载波通信)来做智能家居, 这几天也挺认真的研究了下PLC技术,两者其实各有千秋, 各位有什么好的建议 ...…

查看全部问答>