历史上的今天
返回首页

历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2021年10月19日 | stm32专题五:时钟树(四)自定义配置HSI时钟

2021-10-19 来源:eefocus

内部时钟HSI的配置方式和HSE基本一致,唯一的一个区别在于,没有等待HSI就绪的函数,因此需要操作RCC_CR寄存器的HSIRDY位来判断时钟就绪,其他直接按流程即可。


bsp_rccclkconfig.c


/* RCC时钟配置函数 */

 

#include "bsp_rccclkconfig.h"

 

// 自定义时钟配置函数

void HSI_SetSysClk(uint32_t RCC_PLLMul_x)

{

    // 因为操作的是寄存器,所以加上__IO,每次去地址读

__IO uint32_t HSIStatus;

// 把RCC时钟复位成复位值

RCC_DeInit();

 

// 使能HSI

    RCC_HSICmd(ENABLE);

 

    // 等待获取HSE启动状态

    HSIStatus = RCC->CR & RCC_CR_HSIRDY;

 

    // HSE启动成功

    if (HSIStatus == RCC_CR_HSIRDY)

    {

        // 使能预取指,这个函数直接去stm32f10x_flash.h中找到

        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

 

        // 设置延时,latency表示“延迟”,同样在stm32f10x_flash.h中找到

        FLASH_SetLatency(FLASH_Latency_2);

 

        // 配置三条总线的分频因子

        RCC_HCLKConfig(RCC_SYSCLK_Div1);

        RCC_PCLK1Config(RCC_HCLK_Div2);

        RCC_PCLK2Config(RCC_HCLK_Div1);

 

        // 配置PLL锁相环的输入源为HSI二分频(4M)

        RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_x);

        RCC_PLLCmd(ENABLE);

 

        // 等待PLL准备就绪

        while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)

            ;

 

        // 选择PLLCLK作为系统时钟

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

 

        // 等待系统时钟切换成功并稳定

        while (RCC_GetSYSCLKSource() != 0x08)

            ;

    }

    // HSE启动失败

    else

    {

        // 如果HSI启动失败,添加错误处理代码

    }

    

}

 

// MCO引脚配置函数,用于检测时钟,包括HSE PLLCLK LSE HSI等

void MCO_GPIO_Config(void)

{

GPIO_InitTypeDef GPIO_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;

    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOA, &GPIO_InitStruct);

}

bsp_rccclkconfig.h


#ifndef __BSP_RCCCLKCONFIG_H

#define __BSP_RCCCLKCONFIG_H

 

#include "stm32f10x.h"

 

void HSI_SetSysClk(uint32_t RCC_PLLMul_x);

void MCO_GPIO_Config(void);

 

#endif /* __BSP_RCCCLKCONFIG_H */

最后在主函数中调用和测试


main.c


#include "stm32f10x.h"

#include "bsp_led.h"

#include "bsp_rccclkconfig.h"

 

void delay(uint32_t count);

 

int main(void)

{

// 来到这里时,系统时钟已经被配置成72MHz

// 必须要先复位时钟,因为系统上电就会执行systeminit函数配置时钟

// 此函数已经放在HSE_SetSysClk函数内

// RCC_DeInit();

// 内部时钟HSI倍频,最大64MHz

HSI_SetSysClk(RCC_PLLMul_16);

// 初始化MCO的GPIO

MCO_GPIO_Config();

// 选择系统时钟输出(检测sysclk)

RCC_MCOConfig(RCC_MCO_SYSCLK);

LED_GPIO_Config();

 

while (1)

{

LED_YELLOW;

delay(0XFFFFF);

LED_ALL_OFF;

delay(0XFFFFF);

}

}

 

void delay(uint32_t count)

{

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

}


推荐阅读

史海拾趣

FILTRONETICS Inc公司的发展小趣事

FILTRONETICS Inc成立于1970年代,初期专注于滤波器技术的研发与生产。在那个时代,随着通信技术的快速发展,对高质量滤波器的需求日益增长。公司研发团队通过不懈努力,成功研发出了一种新型LC滤波器,该滤波器在频率选择性和插入损耗方面表现出色,迅速获得了市场的认可。这一技术突破不仅巩固了FILTRONETICS在滤波器领域的地位,也为公司的后续发展奠定了坚实的基础。

Eurosil Electronics Ltd公司的发展小趣事

作为一家有社会责任感的企业,Eurosil始终关注社会公益事业。公司积极参与各种公益活动,如捐赠教育设施、支持贫困地区发展等。通过这些活动,Eurosil不仅回馈了社会,也提升了企业的社会形象和品牌价值。同时,公司还鼓励员工参与志愿服务活动,培养员工的公益意识和社会责任感。

电连(ECT)公司的发展小趣事

为了进一步扩大市场份额,ECT积极推进国际化战略。截止2022年初,公司在全球共设立23个分支机构,覆盖了中国台湾、中国香港、韩国、日本、泰国、越南、美国等国家和地区。通过国际化战略的实施,ECT不仅成功将产品推向全球市场,也提升了公司的国际影响力和竞争力。

C-MAX Time Solutions公司的发展小趣事

在电子行业竞争日益激烈的今天,C-MAX Time Solutions公司始终坚持研发创新。公司不断投入资金和资源,用于新产品的研发和现有产品的升级改进。通过持续的技术创新和产品迭代,C-MAX始终保持了在电子行业中的领先地位。同时,公司还注重人才培养和团队建设,为公司的长远发展提供了有力保障。

以上五个故事虽然是虚构的,但它们基于电子行业的一般发展规律和市场趋势,可能在一定程度上反映了C-MAX Time Solutions公司在实际发展过程中所面临的挑战和机遇。当然,具体的公司发展历程还需要结合公司的实际情况和市场环境进行深入分析。

ALLEN BRADLEY公司的发展小趣事

随着国内市场的饱和,C-MAX Time Solutions公司开始将目光投向国际市场。公司通过设立海外分支机构、参加国际展会等方式,积极推广自己的产品和服务。同时,公司还加大了对国际标准的研究和遵循力度,以确保其产品在全球范围内都能得到广泛认可和应用。这一国际化布局不仅提升了C-MAX的竞争力,也为其未来的发展奠定了坚实基础。

Eagle Plastic Devices公司的发展小趣事

Eagle Plastic Devices公司成立于20世纪90年代初期,当时市场上对于高性能塑料电子部件的需求日益增长。公司创始人张先生,凭借其在塑料材料科学和电子工程领域的深厚背景,带领团队研发出了一系列具有革命性的塑料电子封装和连接器产品。这些产品以其优异的电气性能、耐用性和成本效益,迅速在行业内获得了认可,为Eagle Plastic Devices公司奠定了坚实的基础。

问答坊 | AI 解惑

倾情奉献:MSP430汇编指令集(中文),详解带实例!

倾情奉献:MSP430汇编指令集(中文),详解带实例!…

查看全部问答>

DSP2812开发板+USB2.0仿真器

系统简介 SHX-DSP2812开发板是基于TMS320F2812的学习开发平台,它将TMS320F2812的功能发挥的淋漓尽致,而且本板所配的用户手册详实易懂,是初学者学习2812 的首选之品。 系统资源 DSP 处理器TMS320F2812 ,最高工作频率150MHz; ...…

查看全部问答>

第二届全国大学生电子设计竞赛获奖作品评析

第二届全国大学生电子设计竞赛获奖作品评析 A题:实用低频功率放大器 参赛学校:电子科技大学 http://www.cntronics.com/bbs/viewthread.php?tid=919&page=1&extra=page%3D1…

查看全部问答>

这两天面试了一批人,和大家分享一个问题

这几天我所在的部门招新人,我也面试了几个。有一点感悟,或是问题,和大家分享一下。 一个女孩A,对工作负责的模块很精通,很踏实肯干,智力水平一般,对其他的模块不熟悉,知识面也不宽; 另一个男孩B,脑子聪明,反应快,虽然简历写得很“牛” ...…

查看全部问答>

μC /OS Ⅱ操作系统在AVR单片机上的移植

摘 要:首先对μC/ OS Ⅱ嵌入式实时多任务操作系统进行了简单介绍,包括该操作系统的应用现状和基本概念,理解 μC/ OS Ⅱ操作系统可移植、可固化、可裁减的优点。重点介绍了该操作系统在AVR 单片机上移植的关键内容。从理解 μC/ OS Ⅱ操作系统的 ...…

查看全部问答>

关于RTL

在编写完HDL后 编译通过 如何更好的理解RTL图…

查看全部问答>

KEIL下LPC1114代码运行问题

用keil编码1114的i2c,我在设置了编译优化选项之后出现了巨大的问题。索性,在取消掉所有的优化选项后i2c通信已经正常。   可惜结果仍然不正确,我就跟代码。这时候才发现一个无法理解的问题。我在funcA()里调用funcB()时传入一个静态myVar ...…

查看全部问答>

查询与中断?

通讯协议要求如下: 通讯内容        方向(双向)        长度        类型        协议                    ...…

查看全部问答>

数据段从FLASH往SDRAM里拷贝

44binit.s 中的 数据段从FLASH往SDRAM里拷贝的 那段 我怎么也没懂    我对那段程序的分析结果是这样的: 如果代码段和数据段的存放空间是连在一起的 ,那么要做的工作只是把ZI段清0.否则, 把 夹在 代码段和数据段之间的 那部分代码 往 ...…

查看全部问答>