STM32F030F4P6单片机由外部时钟改为内部时钟

2019-09-09来源: eefocus关键字:STM32F030F4P6  单片机  外部时钟  内部时钟

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 */


关键字:STM32F030F4P6  单片机  外部时钟  内部时钟 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic473878.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:串口接收数据并对数据进行处理
下一篇:ROS使用STM32F407ZGT6作为底盘控制器

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32F030F4P6单片机由外部时钟改为内部时钟的步骤
; 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 */  }  } 三.接下来我们想将系统时钟改为内部时钟,修改办法依旧是修改  SetSysClock()这个函数中的配置.首先我们要知道单片机内部的时钟到底是怎样一种
发表于 2019-10-09
STM32F030F4P6单片机由外部时钟改为内部时钟的步骤
STM32F042F6P6-USB设备开发最小系统之键盘示例
最常见的USB设备要数鼠标和键盘了,STM32F042F6P6这块小板(这里可购买,留言有优惠:购买链接)的鼠标示例已经写了,现在来写下模拟键盘的示例.不多说,开始配置,打开STM32CubeMX,选择STM32F042F6P6芯片,开启pin脚映射,打开USB设备,选择USB设备为HID,设置按键和LED对应引脚的输入输出模式:配置按键和LED引脚的状态及备注名:可以在此修改USB设备名称、厂家、PIDVID等:配置工程输出参数,然后生成并打开工程:按图中所示打开usbd_hid.c文件,找到HID_MOUSE_ReportDesc数组定义处(默认生产HID设备为Mouse,这里数组名不影响,只要里面的描述符是键盘的就行),修改
发表于 2019-08-05
STM32F042F6P6-USB设备开发最小系统之键盘示例
STM32F030F4P6无法进入捕获中断的解决方法
出于节约成本又想快速上手的角度出发选择了这款单片机进行开发。但是stm32f030这款单片机的网上资源比其他系列少了很多,输入捕获采集的例程更是极少。楼主使用PB1口进行捕获采集计算频率时发现无法进入捕获中断,经过学习其他历程发现输入捕获时io口初始化很重要,io口需要设置为复用推挽输出才能触发捕获中断(请原谅楼主第一次用捕获中断)。最后实测频率1-1000hz的信号源输出误差在1%以下。部分代码分享如下,后续会上传整个工程方便大家利用。1.复用功能映射GPIO_PinAFConfig(GPIOB, GPIO_Pin_1, GPIO_AF_0);//配置PB1为TIM14_CH12.IO口初始化
发表于 2019-07-08
stm32f103系列芯片P15端口当做普通IO使用
在调试板子时发现在PA15口上无论输出高还是低都只有一个电平3.3V,后来搞得程序都下不了,如果是禁用了端口,可以参考我的博客 下面上整个代码,实测可以,就是不能进行仿真 在示波器上可以看到,电平不断变化。#include "stm32f10x.h"#include "bsp_usart.h"void delay_ms(u16 time){       u16 i=0;     while(time--)   {      i
发表于 2019-02-13
STM8L101F3P-串口发送功能初始化
1.串口初始化函数CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv1);GPIO_ExternalPullUpConfig(GPIOC,GPIO_Pin_3|GPIO_Pin_4, ENABLE);CLK_PeripheralClockConfig(CLK_Peripheral_USART, ENABLE);USART_DeInit();USART_Init(9600, USART_WordLength_8D, USART_StopBits_1, USART_Parity_No,USART_Mode_Tx);2.发送一个uint8_t类型的数据USART_S
发表于 2018-10-08
控制单个单片机IO的按键+定时器10ms定时器程序
/*刚刚开始学习AVR单片机,*把学习到的知识和大家分享。有错误或者更好的写法,欢迎交流。*方便新手学习,我都尽可能的注释*/#include <iom16v.h>#include <macros.h>#include <stdio.h>                        //标准输入输出头文件#define LED_DDR  DDRA       
发表于 2019-10-21
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved