历史上的今天
返回首页

历史上的今天

今天是:2024年09月09日(星期一)

正在发生

2019年09月09日 | STM32F030F4P6单片机由外部时钟改为内部时钟

2019-09-09 来源:eefocus

static void SetSysClock(void)

{

  __IO uint32_t StartUpCounter = 0, HSEStatus = 0;

  

  /* SYSCLK, HCLK, PCLK configuration ----------------------------------------*/

  /* Enable HSE */    

//  RCC->CR |= ((uint32_t)RCC_CR_HSEON);//使用外部8M时钟

RCC->CR |= ((uint32_t)RCC_CR_HSION);//使用内部8M时钟

 

  /* Wait till HSE is ready and if Time out is reached exit */

  do

  {

//    HSEStatus = RCC->CR & RCC_CR_HSERDY;//使用外部8M时钟

HSEStatus = RCC->CR & RCC_CR_HSIRDY;//使用内部8M时钟

    StartUpCounter++;  

  } 

// while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT));//使用外部8M时钟

  while((HSEStatus == 0) && (StartUpCounter != HSI_STARTUP_TIMEOUT));//使用内部8M时钟

// if ((RCC->CR & RCC_CR_HSERDY) != RESET)//使用外部8M时钟

  if ((RCC->CR & RCC_CR_HSIRDY) != RESET)//使用内部8M时钟

  {

    HSEStatus = (uint32_t)0x01;

  }

  else

  {

    HSEStatus = (uint32_t)0x00;

  }  

 

  if (HSEStatus == (uint32_t)0x01)

  {

    /* Enable Prefetch Buffer */

    FLASH->ACR |= FLASH_ACR_PRFTBE;

    FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY;

 

    /* HCLK = SYSCLK */

    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;

      

    /* PCLK = HCLK */

    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV1;

 

    /*  PLL configuration:  = HSE *  6 = 48 MHz */

//    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));//使用外部8M时钟

 //   RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLMULL6);//使用外部8M时钟

    

// RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1|RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLMULL9);//内外都不使用

RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_Div2|RCC_CFGR_PLLXTPRE_PREDIV1|RCC_CFGR_PLLMULL9);//使用内部8M时钟

   /* Enable PLL */

    RCC->CR |= RCC_CR_PLLON;

 

    /* Wait till PLL is ready */

    while((RCC->CR & RCC_CR_PLLRDY) == 0)

    {

    }

 

    /* Select PLL as system clock source */

    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));

    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    

 

    /* Wait till PLL is used as system clock source */

    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)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 */

  }  

}

 


 


/******************************************************************************/

/*                                                                            */

/*                         Reset and Clock Control                            */

/*                                                                            */

/******************************************************************************/

 

/********************  Bit definition for RCC_CR register  ********************/

#define  RCC_CR_HSION                        ((uint32_t)0x00000001)        /*!< Internal High Speed clock enable */

#define  RCC_CR_HSIRDY                       ((uint32_t)0x00000002)        /*!< Internal High Speed clock ready flag */

#define  RCC_CR_HSITRIM                      ((uint32_t)0x000000F8)        /*!< Internal High Speed clock trimming */

#define  RCC_CR_HSICAL                       ((uint32_t)0x0000FF00)        /*!< Internal High Speed clock Calibration */

#define  RCC_CR_HSEON                        ((uint32_t)0x00010000)        /*!< External High Speed clock enable */

#define  RCC_CR_HSERDY                       ((uint32_t)0x00020000)        /*!< External High Speed clock ready flag */

#define  RCC_CR_HSEBYP                       ((uint32_t)0x00040000)        /*!< External High Speed clock Bypass */

#define  RCC_CR_CSSON                        ((uint32_t)0x00080000)        /*!< Clock Security System enable */

#define  RCC_CR_PLLON                        ((uint32_t)0x01000000)        /*!< PLL enable */

#define  RCC_CR_PLLRDY                       ((uint32_t)0x02000000)        /*!< PLL clock ready flag */

 

/*******************  Bit definition for RCC_CFGR register  *******************/

/*!< SW configuration */

#define  RCC_CFGR_SW                         ((uint32_t)0x00000003)        /*!< SW[1:0] bits (System clock Switch) */

#define  RCC_CFGR_SW_0                       ((uint32_t)0x00000001)        /*!< Bit 0 */

#define  RCC_CFGR_SW_1                       ((uint32_t)0x00000002)        /*!< Bit 1 */

 

#define  RCC_CFGR_SW_HSI                     ((uint32_t)0x00000000)        /*!< HSI selected as system clock */

#define  RCC_CFGR_SW_HSE                     ((uint32_t)0x00000001)        /*!< HSE selected as system clock */

#define  RCC_CFGR_SW_PLL                     ((uint32_t)0x00000002)        /*!< PLL selected as system clock */

 

/*!< SWS configuration */

#define  RCC_CFGR_SWS                        ((uint32_t)0x0000000C)        /*!< SWS[1:0] bits (System Clock Switch Status) */

#define  RCC_CFGR_SWS_0                      ((uint32_t)0x00000004)        /*!< Bit 0 */

#define  RCC_CFGR_SWS_1                      ((uint32_t)0x00000008)        /*!< Bit 1 */

 

#define  RCC_CFGR_SWS_HSI                    ((uint32_t)0x00000000)        /*!< HSI oscillator used as system clock */

#define  RCC_CFGR_SWS_HSE                    ((uint32_t)0x00000004)        /*!< HSE oscillator used as system clock */

#define  RCC_CFGR_SWS_PLL                    ((uint32_t)0x00000008)        /*!< PLL used as system clock */


推荐阅读

史海拾趣

HAHN - Elektrobau GmbH & Co KG公司的发展小趣事

1991年,高通的CDMA技术首次被商用于美国卫星通信公司的无线电话网,标志着高通在移动通信领域的重大突破。与此同时,高通开始向智能手机芯片方向转型,目标是利用芯片技术使手机具备更强大的计算能力。随着技术的不断成熟,高通推出了多款性能卓越的移动应用处理器,如Snapdragon系列,迅速占据了智能手机芯片市场的主导地位。这一转型不仅巩固了高通在移动通信领域的地位,也为公司的长期发展奠定了坚实基础。

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

2007年,Apex Microtechnology迎来了一个重要的发展机遇,被音频和能源市场上领先的混合信号处理元件供应商Cirrus Logic收购。此后,Apex Microtechnology作为Cirrus Logic在德克萨斯州奥斯汀的一个分公司,继续从事复杂芯片设计与开发。这次收购为Apex Microtechnology带来了更多的资源和支持,推动了其在电子行业的进一步发展。

ALSC [Alliance Semiconductor Corporation]公司的发展小趣事

ALSC公司成立于XXXX年,初创期面临着激烈的市场竞争和技术壁垒。然而,创始人凭借对半导体技术的深刻理解和市场需求的敏锐洞察,决定专注于开发高性能、低功耗的半导体产品。经过多次尝试和不断改进,公司成功推出了一款具有竞争力的产品,并逐渐在市场上获得了一席之地。

EDDING公司的发展小趣事

在2000年代初,ECLIPSE公司是一家专注于企业级软件开发的公司。公司内部的一个小型团队开发了一个名为“Eclipse”的集成开发环境(IDE),用于提高内部项目的开发效率。随着Eclipse的内部使用越来越广泛,公司高层意识到其巨大的潜力,决定将Eclipse开源,并成立专门的Eclipse部门来管理和推广这一项目。通过开放源代码和社区合作,Eclipse迅速吸引了全球开发者的关注,并逐渐成长为开源开发领域的领军者。

Hewlett Packard Co公司的发展小趣事
除了常规的高、低音控制外,一些设计还加入了超低音控制、平衡控制、等响度音量控制等功能,提升了电路的实用性和灵活性。
成都振芯/国腾(CORPRO)公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,CORPRO始终保持着对创新的追求和投入。近年来,公司不仅加强了在集成电路设计、微波组件开发等领域的研发能力,还积极拓展物联网、大数据等新兴领域的应用场景。这些努力使得CORPRO在行业内获得了广泛认可,并多次荣获各类荣誉奖项。例如,在2022年5月20日,CORPRO入选了四川省拟推荐2022年度国家技术创新示范企业公示名单,这一荣誉再次证明了CORPRO在电子行业的实力和影响力。

总之,成都振芯/国腾(CORPRO)公司的发展历程充满了挑战与机遇。通过不断的努力和创新,CORPRO已经成长为电子行业中一家具有强大实力和广泛影响力的企业。未来,CORPRO将继续致力于技术创新和市场拓展,为电子行业的发展贡献更多力量。

问答坊 | AI 解惑

LED 光源驱动设计及周边器件选择

    LED 光源驱动设计及周边器件选择       …

查看全部问答>

求 IAR ,zigbee技术开发高手

本人刚进入无线通讯领域,无甚经验,求高手指点一二。     具体项目关于zigbee技术的无线通讯,使用CC2430单片机实现,编译器为IAR,难处在于有许多代码看不懂,请乐意帮助的朋友留个联系方式,便于讨教!!感恩戴德!…

查看全部问答>

求高手指导怎样用单片机驱动液晶屏的触摸板

最近想玩一下液晶取字,就想在12864液晶上,加一块触摸板,通过对触摸板的触摸,达到对液晶相应位置“字”的“取”。我想用51单片机完成,不知道方案,触摸板看过,好像电源线、信号线都是手机里那种,很难焊。求高手,我该用什么触摸板来做 ...…

查看全部问答>

实训——数字成年历LCD12864显示

proteus仿真和keil程序,跟大家分享一下我的实训成果!…

查看全部问答>

请教一个关于时钟信号的问题

大家好,我是一个FPGA初学者,最近在用赛灵思的片子做项目。我将60M的全局时钟奇分频为800KHZ(输出),同时又把800KHZ当作时钟信号再分频为8KHZ(输出),但是发现place&route的时候报了警告,大致是说我用800KHZ做时钟信号会有超出指标的延迟。 ...…

查看全部问答>

STM32 中断的全局变量

在 ccit.h中 定义全局 数组  volatile uint8_t global[50]; it.c中引用了   #include\'\'ccit.h\" 然后再main.c中用extern uint8_t  global[50]; 这个数组是接收串口2的数据 在串口2第一次接收到PC数据为 & ...…

查看全部问答>

Beaglebone学习汇总贴(不断更新)

把所有Beaglebone学习过程中分享的资料汇总一下,方便大家也方便自己查找 Beaglebone学习之1--初印象 https://bbs.eeworld.com.cn/thread-349026-1-1.html Beaglebone学习之2--LCD屏幕选择,电路设计(完成) https://bbs.eeworld.com.cn/threa ...…

查看全部问答>

提供点创意相关的信息 分享资料

我只能提供创意相关的咨询等 资料免费送给大家 下面就看你们的创意了! …

查看全部问答>