...
//STM32F103RBT6,包含的启动代码是 STM32F10x.s #include "mytype.h" //GPIOA8是 LED0 #define GPIOA_CRL (*(vu32*)(0x40000000+0x10000+0x0800+0x00)) //volatile unsigned long #define GPIOA_CRH (*(vu32*)(0x40000000+0x10000+0x0800+0x04)) #define GPIOA_IDR (*(vu32*)(0x40000000+0x10000+0x0800+0x08)) #define GPIOA_ODR (*(vu32*)(0x40000000+0x10000+0x0800+0x0C)) #define PERIPH_BASE ((u32)0x40000000) //外设基址 #define APB1PERIPH_BASE PERIPH_BASE //APB1总线上的外设基址 #define APB2PERIPH_BASE (PERIPH_BASE + 0x10000) #define AHBPERIPH_BASE (PERIPH_BASE + 0x20000) //AHB总线外设基址 #define FLASH_R_BASE (AHBPERIPH_BASE + 0x2000) //flash相关寄存器基址 #define FLASH_ACR (*(vu32*)(FLASH_R_BASE+0x00))//闪存控制0x40000000+0x20000+0x2000+0x00 #define RCC_BASE (AHBPERIPH_BASE + 0x1000) //0x40000000+0x20000+0x1000 #define RCC ((RCC_TypeDef*)RCC_BASE) //时钟相关 typedef struct { //偏移,寄存器名称 vu32 CR; //0x00,时钟控制 vu32 CFGR; //0x04,时钟配置 vu32 CIR; //0x08,时钟中断 vu32 APB2RSTR; //0x0c,APB2外设复位 vu32 APB1RSTR; //0x10,APB1外设复位 vu32 AHBENR; //0x14,AHB外设时钟使能 vu32 APB2ENR; //0x18,APB2外设时钟使能 vu32 APB1ENR; //0x1c,APB1外设时钟使能 vu32 BDCR; //0x20,备份域控制 vu32 CSR; //0x24,控制/状态 } RCC_TypeDef; void delay(unsigned long i)//8M内部时钟的超级不精确的软延时,9倍频后延时是之前的9倍 { int j; while(i--) { for(j=0;j<1500;j++) {} } } void Stm32_Clock_Init(u8 PLL) //时钟初始化 { unsigned char temp=0; RCC->CR|=0x00010000; //外部高速时钟使能HSEON while(!(RCC->CR>>17));//检测第17位HSERDY为1表示外部时钟就绪 RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1; PLL-=2; //抵消2个单位,参数匹配 RCC->CFGR|=PLL<<18; //设置PLL值 2~16 RCC->CFGR|=1<<16; //PLLSRC ON FLASH_ACR|=0x32; //FLASH配2个等待周期,匹配72M系统时钟 RCC->CR|=0x01000000; //PLLON while(!(RCC->CR>>25));//等待PLL锁定 RCC->CFGR|=0x00000002;//设置PLL作为系统时钟 while(temp!=0x02) //等待PLL作为系统时钟设置成功 { temp=RCC->CFGR>>2; temp&=0x03; } } int main(void) { Stm32_Clock_Init(9); //启用外部8M时钟,9倍频,即72M { //GPOIA的led初始化 RCC->APB2ENR= 1<<2; //打开PA时钟, GPIOA_CRH &= 0XFFFFFFF0; //准备配置PA8 ,PA8是LED0 GPIOA_CRH |= 0X00000003; //PA8 推挽输出 GPIOA_ODR |= 1<<8; //PA8 输出高,即先关闭led } while(1) { GPIOA_ODR=clBit(GPIOA_ODR,8); //第8位置0,点亮led delay(3000); //用一样的参数,和之前使用内部8M时钟的比较效果 GPIOA_ODR=enBit(GPIOA_ODR,8); //第8位置1,熄灭led delay(3000); } } //目测led翻转速度差不多是原来9倍
相关推荐
自己写的STM32的学习笔记,详细介绍了RCC系统时钟的配置方法,内有程序代码,可以正常行,注释详细。
stm32f10x,RCC系统时钟配置,完成工程范例
STM32F2系列技术培训 复位和时钟控制 RCC
下面就我调试STM32F407的这段时间,介绍一下RCC的部分功能
stm32f103实验3:RCC的配置和使用
STM32L4复位和时钟控制(RCC)介绍
根据时钟树可以看出用PLL对HSI进行倍频时,硬件将首先对HSI 二分频,也就是为4M,所以必须再对其进行12倍频才能变成48M,最后通过RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);语句将PLL时钟作为系统时钟,至此系统的...
STM32F429单片机的外设例程 59-STM32F429_RCC_PLL
但是,当遇到12M晶振是如何修改STM32系统时钟呢? 具体步骤如下: 第一步,全局搜索HSE_VALUE #define HSE_VALUE ((uint32_t)8000000) /*!< Value xss=removed xss=removed>CFGR &= (uint32_t)((uint32_t)~(RCC_...
stm32f103 时钟设置,采用外部晶振。
低功耗系列芯片 STM32L15x_时钟和复位系统RCC
STM32使用技巧,实战应用开发小系统参考资料,源码参考。经测试可运行。 详细介绍了一些STM32框架的各种功能和模块,以及如何使用STM32进行应用开发等。 适用于初学者和有经验的开发者,能够帮助你快速上手STM32并...
STM32F103ZET6单片机年月日时分秒RTC实时时钟实验例程源码 u8 RTC_Init(void) { //检查是不是第一次配置时钟 u8 temp=0; RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); //使能PWR和...
电子-STM32L15x03时钟和复位系统RCC.pdf,单片机/嵌入式STM32-F0/F1/F2
STM32x系统时钟的详细介绍,对新人理解STM32的时钟系统有着很大帮助。
STM32F103C8T6-HAL库 RCC时钟配置
RCC 时钟选择实验 实验目的:掌握RCC时钟的选择方法。 实验内容:按键循环切换时钟源选择,并且在PA8引脚输出。时钟源分别是PLL(24MHz),HIS(16M), MSI(4.194MHz)。 实验现象:按下USER按键,芯片的时钟在PLL(24...
STM32L4,复位与时钟控制(rcc)。
STM32复位和时钟控制RCC.doc
详细的STM32系统时钟配置,以及所有时钟是什么,来源是什么,怎么用,目前还在完善中,内有由原子程序提取出的逐句解释,包括寄存器位置,详细的哪一位怎么用,本人正在由库函数转寄存器,习惯整理各个外设,全部配...