STM32芯片时钟配置

发布者:丝语轻风最新更新时间:2019-12-10 来源: eefocus关键字:STM32芯片  时钟  配置 手机看文章 扫描二维码
随时随地手机看文章

对STM32进行软件开发时,最基本的就是对STM32芯片进行时钟和端口配置,然后是对项目所用到的片上资源进行配置并驱动,下面给出时钟和端口配置代码,该代码几乎涵盖了片上所有时钟和端口配置项目,可根据自己需要进行删除不必要的配置项:

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

* Function Name : RCC_Configuration 复位时钟控制配置

* Description : Configures the different system clocks.

* Input : None

* Output : None

* Return : None

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

void RCC_Configuration(void)

{

/* system clocks configuration -----------------系统时钟配置-------------------*/

/* RCC system reset(for debug purpose) */

RCC_DeInit(); //将外设RCC寄存器重设为缺省值

/* Enable HSE */

RCC_HSEConfig(RCC_HSE_ON); //开启外部高速晶振(HSE)

/* Wait till HSE is ready */

HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待HSE起振

if(HSEStartUpStatus == SUCCESS) //若成功起振,(下面为系统总线时钟设置)

{

/* Enable Prefetch Buffer */

FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //使能FLASH预取指缓存

/* Flash 2 wait state */

FLASH_SetLatency(FLASH_Latency_2); //设置FLASH存储器延时时钟周期数(根据不同的系统时钟选取不同的值)

/* HCLK = SYSCLK */

RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟=72 MHz

/* PCLK2 = HCLK/2 */

RCC_PCLK2Config(RCC_HCLK_Div2); //设置APB1时钟=36 MHz(APB1时钟最大值)

/* PCLK1 = HCLK/2 */

RCC_PCLK1Config(RCC_HCLK_Div1); //设置APB2时钟=72 MHz

/* Configure ADCCLK such as ADCCLK = PCLK2/2 */

RCC_ADCCLKConfig(RCC_PCLK2_Div2); //RCC_PCLK2_Div2,4,6,8

/* PLLCLK = 8MHz * 9 = 72 MHz */

RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); //PLL必须在其激活前完成配置(设置PLL时钟源及倍频系数)

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

{

}

}

/* Enable peripheral clocks -----------------外设时钟使能-------------------*/

/* Enable AHB peripheral clocks -----------------AHB外设时钟使能-------------------*/

/* Enable DMA clock */

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//使能DMA时钟

/* Enable SRAM clock */

// RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SRAM, ENABLE);//使能SRAM时钟

/* Enable FLITF clock */

// RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FLITF, ENABLE);//使能FLITF时钟

/* Enable APB1 peripheral clocks -----------------APB1外设时钟使能-------------------*/

/* TIM2,3,4 clock enable */

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能TIM2时钟 if (APB1 prescaler="1") x1

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//使能TIM3时钟 else x2

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//使能TIM4时钟

/* WWDG clock enable */

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);//使能WWDG时钟

/* Enable SPI2 clocks */

// RCC_APB1PeriphClockCmd(RCC_APB2Periph_SPI2, ENABLE);//使能SPI2时钟

/* USART2,3 clock enable */

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//使能USART2时钟(对应万利开发板上的USART1)

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);//使能USART3时钟(万利开发板上未接该串口)

/* I2C1,2 clock enable */

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);//使能I2C1时钟

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);//使能I2C2时钟

/* USB clock enable / PLL clock divided by 1.5 used as USB clock source */

// RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); //根据不同PLLCLK选择分频比,必须确保USBCLK始终是48MHz

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);//使能USB时钟

/* CAN clock enable */

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);//使能CAN时钟

/* BKP clock enable */

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);//使能BKP时钟

/* PWR clock enable */

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);//使能PWR时钟

/* APB1Periph_ALL clock enable */

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL, ENABLE);//使能APB1Periph_ALL时钟

/* Enable APB2 peripheral clocks -----------------APB2外设时钟使能-------------------*/

/* Enable GPIOA,B,C,D,E clocks */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能GPIOA时钟

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能GPIOB时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//使能GPIOC时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);//使能GPIOD时钟

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);//使能GPIOE时钟

/* AFIO clock enable */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);////使能AFIO时钟

/* Enable ADC1,2clocks */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//使能ADC1时钟

//RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);//使能ADC2时钟

/* TIM1 clock enable */

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//使能TIM1时钟

/* Enable SPI1 clocks */

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//使能SPI1时钟

/* USART1 clock enable */

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//使能USART1时钟(对应万利开发板上的USART0)

/* APB1Periph_ALL clock enable */

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_ALL, ENABLE);//使能APB2Periph_ALL时钟

/* Enable no peripheral clocks -----------------非总线上外设时钟配置-------------------*/

/* Enable Internal High Speed oscillator */

//RCC_HSICmd(ENABLE);

/* Enable the Internal Low Speed oscillator */

//RCC_LSICmd(ENABLE); //给IWDG提供时钟信号(如果IWDG运行的话,LSI不能被失能)

/* Configure RTCCLK such as ADCCLK = PCLK2/2 */

// RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);///* Select the LSE as RTC clock source */

// RCC_RTCCLKCmd(ENABLE);///* Enable the RTC clock */

/* Enable the Clock Security System */

//RCC_ClockSecuritySystemCmd(ENABLE);

/* Output PLL clock divided by 2 on MCO pin */

//RCC_MCOConfig(RCC_MCO_PLLCLK_Div2);// 警告:当选中系统时钟作为MCO管脚的输出时,注意它的时钟频率不超过50MHz(最大I/O速率)。

}

关键字:STM32芯片  时钟  配置 引用地址:STM32芯片时钟配置

上一篇:stm32 引脚功能设定及应用
下一篇:WS103C8例程——串口2【worldsing笔记】

推荐阅读最新更新时间:2024-11-07 03:17

如何快速实现CANopen网络的组建与配置
CANopen协议兴起于欧洲,现阶段在欧洲特别是工业发达的德国几乎所有的设备都提供CANopen的支持,我国工业还相对的落后,正处在引进国外先进设备的阶段,这就要求我们懂得CANopen通信协议,同时能够利用CANopen设备正确的组建一个适合特定应用的CANopen网络。 CANopen从站/主站特点 具有网络管理(Network Management:简称NMT)主机功能的设备通常被称为CANopen主站设备,通常也具有服务数据(Service Date Object:简称SDO)客户端功能。反之具有网络管理(NMT)从机功能的设备通常被称为CANopen从站设备,且其必须具备有服务数据服务器功能。这样CANopen主站设备
[嵌入式]
单片机外部与内部时钟源的切换
DAVE 数字应用工程师,出自Infineon科技。它能帮我们准确而快速地进行基于Infineon8位、16位或32位单片机的嵌入式系统设计。由于Infineon的嵌入式控制器的寄存器的数量非常大,大约有一千多个。所以对大量寄存器的初始化是一件相当棘手的事,而有了DAVE的平台就能很轻松地完成这些事情。同时DAVE还可完成单片机的其它初始化工作,与Keil或、Tasking等编译软件实现链接,轻松完成嵌入式系统的软件开发工作。 XC2336B是Infineon的16位微控制器XC2000家族中的一员,它将功能和性能都得到扩展的C166SV2内核、功能强大的片上外设子系统和各种片上存储器进行了完美结合。执行速度更快、稳定性更好、操作更
[单片机]
单片机外部与内部<font color='red'>时钟</font>源的切换
腾达分布式路由nova MW6配置教程
分布式路由nova MW6套装由3个魔方路由组成,3个路由无主次之分,当其中一个路由器联网成功后自动成为主路由。另外,nova MW6仅支持APP安装,在安装之前请先下载Tenda WiFi APP,在各大应用商店搜索即可下载。 第一步 线路连接 如下图所示,先接通其中一个nova路由器(将它命名为:第1个nova)的电源,然后将从猫(modem)的LAN口出来的网线/入户网线连接到路由器的WAN口。 第二步 配置联网 使用“Tenda WiFi”APP就可以轻松完成联网设置。 1.手机连接到第1个nova路由器的WiFi,无线名称和密码请见路由器底部贴纸。 2.打开“Tenda WiFi”APP,按照页面
[网络通信]
外部中断EXTI的配置注意事项
1,EXTI_InitTypeDef 定义于文件“stm32f10x_exti.h”: typedef struct { u32 EXTI_Line; EXTIMode_TypeDef EXTI_Mode; EXTIrigger_TypeDef EXTI_Trigger; FunctionalState EXTI_LineCmd; } EXTI_InitTypeDef; 1 2 3 4 5 6 7 2,例子: void EXTI_Configuration(void) { EXTI_InitTypeDef EXTI_InitStructure; EXTI_ClearITPendingBit(EXTI_Line2
[单片机]
基于PIC单片机的电波数码显示时钟的设计
电波钟表是一种新兴的计时产品,是把原子振动的频率引出作为计时基准。目的是使世界时间同步统一。主要是为了解决目前石英钟表的精确度问题。石英钟表较机械钟表已准确很多,但日差仍有一秒半秒的误差。这种误差对于人们的日常生活没有多大的影响和更正的必要,但对于军事和科学实验,就是要解决的大问题。在一些重要场合,误差在0.01秒之间,结果也会失之千里。   电波钟的原理,是它有一个原子发射台,定期发射信号,频率每三千年只差一秒,非常准确。电波钟是以原子的精度来制造的计时产品。发射台发出的信号不是一直不断地往外发,而是间隔性的发射。所以电波钟或电波表实际是接收器,接收原子发射台的信号 。   无论电波钟,还是电波表,实际上都是一个接收器,
[单片机]
基于PIC单片机的电波数码显示<font color='red'>时钟</font>的设计
vivo家族新品Z1 要颠覆你对千元机配置的想象?
近日,vivo在其官方旗舰店微博表示,将会发布一款配置卓越、性能强劲的vivo Z1手机,并会在5月25日起,在天猫、京东、苏宁易购以及唯品会同步全面开启预售。从预售的平台来看,vivo的Z系列手机应该主打的是线上市场。vivo表示,该机将会颠覆你对千元机配置的想象。   从预热海报中我们可以看到,vivo Z1采用了主流的刘海全面屏设计,整体的屏占比与vivo X21类似。配置方面,根据官方描述的千元机价位以及颠覆你对千元机配置的想象的描述来看,我们推测Z1将采用高通骁龙630处理芯片。骁龙630作为骁龙625的继承人,主打主流性能的中端机型。骁龙630采用14nm LPP制程工艺,搭载八颗Cortex-A53核心(主频最高2
[手机便携]
STM32片上外设时钟使能 失能和复位的区别
今天分享的关于时钟知识,可能很多人没有在意过。这也是之前有朋友问过的问题,这里就简单给大家普及一下吧。 1 RCC时钟说明 在STM32参考手册中,都有Reset and Clock Control(RCC)复位和时钟控制的章节。 在这一章节就可以看到有两类寄存器:peripheral reset register(RSTR)外设复位寄存器和peripheral clock enable register(ENR)外设时钟使能寄存器。 我们拿STM32F1参考手册为例,可以看到如下图寄存器: 一种是控制外设时钟的寄存器,一种是复位外设的寄存器。 2 外设时钟使能和失能 我们都知道,配置STM32外设,会先开启对应的时钟
[单片机]
<font color='red'>STM32</font>片上外设<font color='red'>时钟</font>使能 失能和复位的区别
STM32串口操作相关事项
放了一段时间,对stm32似乎有点陌生,总结一下! (基于3.0固件库,芯片stm32f103rbt6) 1、配置串口的管脚和时钟 由于串口1、2是在GPIOA上: 所以要是能串口GPIOA、AFIO和1或者2的串口时钟,代码如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1 , ENABLE); 2、对串口的具体物理管脚进行相应的配置: /* A9 USART1_Tx */ GPIO_InitStructure.GPIO_Pin = GPIO_Pi
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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