访问电脑版页面

导航:老古开发网手机版STM32单片机STM32F103单片机

STM32F103的复位及时钟控制模块头文件

导读:
关键字:

 STM32F103的复位及时钟控制模块头文件

在处理器正常工作前,肯定要做一些初始化工作,其中最主要的一个就是初始化各种时钟。通过对STM32F103的复位及时钟控制(RCC)模块分析之后,自己写了一个RCC的头文件,这样使用起来更方便。头文件中首先定义了最基本的几个寄存器,然后再对每个寄存器中的域使用结构体做了定义,可以直接使用寄存器中的位来操作。注意设置系统时钟时要先设置好FLASH的等待周期,不然程序就可能会跑飞。

该测试工程是在以前的GPIO实验的基础上增加系统时钟初始化代码,设置系统时钟为72M。通过流水灯可以看到,比未配置系统时钟之前(8M)流水灯的速度快了很多。

从这里下载完整的测试工程:

系统时钟初始化的代码如下:

//以下时钟配置为最高性能

void SystemClockInit(void)

{

 //设置flash等待周期为2,否则设置为72M系统时钟时就会跑飞

 FLASH_ACR=0x32; 

 pbRCC_CR->HSEON=1;          //使能外部高速时钟

 while(!(pbRCC_CR->HSERDY)); //等待外部高速时钟稳定

 pbRCC_CFGR->MCO=0;          //MCO无时钟输出

 pbRCC_CFGR->USBPRE=1;       //USB时钟1.5分频

 pbRCC_CFGR->PLLMUL=9-2;     //PLL倍频设置为9(外部时钟8MPLL输出72M)

 pbRCC_CFGR->PLLXTPRE=0;     //HSE不分频

 pbRCC_CFGR->PLLSRC=1;       //HSE选作做为PLL时钟源输入

 pbRCC_CFGR->ADCPRE=0;       //ADC时钟2分频

 pbRCC_CFGR->PPRE2=1+6;      //APB2设置为1分频

 pbRCC_CFGR->PPRE1=2+6;      //APB1设置为2分频

 pbRCC_CFGR->HPRE=0;         //AHB无分频

 pbRCC_CR->PLLON=1;          //启动PLL

 while(!(pbRCC_CR->PLLRDY)); //等待PLL稳定

 pbRCC_CFGR->SW=2;           //选择PLL输出为时钟源

 //pbRCC_AHBENR->SRAMEN=1;

 //pbRCC_AHBENR->FLITFEN=1;

 

 //IO口第二功能时钟使能

 pbRCC_APB2ENR->AFIOEN=1;

 

 //各通用IO口时钟使能

 pbRCC_APB2ENR->IOPAEN=1;

 pbRCC_APB2ENR->IOPBEN=1;

 pbRCC_APB2ENR->IOPCEN=1;

 pbRCC_APB2ENR->IOPDEN=1;

 pbRCC_APB2ENR->IOPEEN=1;

 

 //ADC时钟使能

 pbRCC_APB2ENR->ADC1EN=1;

 pbRCC_APB2ENR->ADC2EN=1;

 

 //定时器1时钟使能

 pbRCC_APB2ENR->TIM1EN=1;

 

 //SPI1时钟使能

 pbRCC_APB2ENR->SPI1EN=1;

 

 //串口1时钟使能

 pbRCC_APB2ENR->USART1EN=1;

 

 //定时器234时钟使能

 pbRCC_APB1ENR->TIM2EN=1;

 pbRCC_APB1ENR->TIM3EN=1;

 pbRCC_APB1ENR->TIM4EN=1;

 

 //窗口看门狗时钟不使能

 pbRCC_APB1ENR->WWDGEN=0;

 

 //SPI2时钟使能

 pbRCC_APB1ENR->SPI2EN=1;

 

 //串口23时钟使能

 pbRCC_APB1ENR->USART2EN=1;

 pbRCC_APB1ENR->USART3EN=1;

 

 //I2C12时钟使能

 pbRCC_APB1ENR->I2C1EN=1;

 pbRCC_APB1ENR->I2C2EN=1;

 

 //USB时钟使能

 pbRCC_APB1ENR->USBEN=1;

 

 //CAN时钟使能

 pbRCC_APB1ENR->CANEN=1;

 

 //备份接口时钟使能

 pbRCC_APB1ENR->BKPEN=1;

 

 //电源接口时钟使能

 pbRCC_APB1ENR->PWREN=1;

 

 //外部低速时钟启动

 pbRCC_BDCR->LSEON=1;

 pbRCC_BDCR->LSEBYP=0;

 pbRCC_BDCR->RTCSEL=1; //选择外部时钟为RTC时钟

}

 

 

 

STM32/STM8

意法半导体/ST/STM

来源:网络整理   作者:佚名  2017/12/4 14:55:00
栏目: [ STM32F103单片机]

相关阅读

STM32F103学习笔记 (十) TFTLCD 显示

STM32F103试用体验:LCD显示与DHT11测量实验

STM32F103学习笔记 (八) PWM输出

基于STM32F103ZE的USART2 端口时钟

STM32F103外部晶振由8M变为12M

STM32F103系列单片机中的定时器工作原理解析

STM32F103利用模拟I2C驱动ADS1115

STM32F103 开发板试用体验:超声波测距功能的实现

嵌入式微处理器STM32F103有什么特点和应用?怎样去开发?

STM32F103C8T6 ULN2003步进电机驱动代码

利用stm32f103的TIM2实现精确延时

STM32F103ZET6 之 通用定时器单脉冲模式实验

stm32F103单片机无源晶振不起振排除问题

STM32F103试用体验(四):硬件原理与机壳组装

STM32F103试用体验:水共震准备材料中的过程

基于单片机Stm32f103 DAC电流输出解决方案

基于STM32F103的USB数据采集模块的设计

stm32f103zet6如何识别flash大小

100脚的STM32F103VE单片机通过FSMC接口读写DS12C887时钟芯片中的寄存器

STm32F103ZET6红牛开发板原理图