...
//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系统时钟配置 本文档是关于STM32的学习笔记,主要介绍了RCC系统时钟的配置方法。RCC(Reset and Clock Control)是STM32微控制器中的一个重要模块,负责管理系统的时钟频率和复位信号。通过...
本文总结了STM32系统时钟的相关知识点,涵盖了时钟树的结构、时钟源、时钟监视系统、时钟输出、时钟配置、时钟使能、时钟相关函数等方面。 一、时钟树结构 STM32的时钟树结构主要包括五个时钟源:HIS RC、HSE Osc...
流水灯实验是学习 STM32 的一个基础实验,主要涉及到 GPIO (General-Purpose Input/Output) 和 RCC (Reset and Clock Control) 的使用。 - **RCC**:在实验中,我们使用 `SystemInit()` 函数将系统时钟设置为 72MHz...
"STM32F103RE 串口中断学习笔记" 本文主要介绍了 STM32F103RE 微控制器中的串口中断编程过程,包括串口中断的初始化、串口接收数据、发送数据等内容。 一、库文件介绍 在进行串口中断编程时,需要添加以下库文件...
对于寄存器配置,STM32F1的时钟控制寄存器主要包括RCC_CR、RCC_CFGR和RCC_PLLCFGR等。例如,RCC_CR中的HSION和HSIRDY控制HSI,HSEON和HSERDY控制HSE;RCC_CFGR中的SW位选择系统时钟源,PLLMUL和PLLSRC设定PLL;RCC_...
这篇STM32学习笔记主要涵盖了STM32的基础知识,包括时钟系统、寄存器配置、中断管理以及系统复位等方面。 1. STM32的时钟系统: - AHB(Advanced High-performance Bus)系统总线分为APB1和APB2,其中APB2工作频率...
STM32学习笔记汇总 在学习STM32笔记汇总中,我们可以看到STM32F207学习笔记的详细内容。本文将从 标准外设库的简介、开发拾遗、STM32技术概述等方面来详细解释相关知识点。 标准外设库的简介 标准外设库是 STM32...
"STM32学习笔记" STM32学习笔记第五篇:通用定时器PWM输出 STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4...
### STM32-按键输入实验学习笔记 #### 一、实验背景与目的 在嵌入式系统开发过程中,用户输入是非常关键的一个环节。通过按键获取用户的指令或数据,是实现人机交互的一种常见方式。本实验旨在通过STM32单片机实现...
本文档是 STM32 的学习笔记汇总,涵盖 STM32F207 学习笔记、标准外设库的简介、STM32 技术概述、使用篇等内容。 标准外设库的简介 标准外设库是 ARM 公司和芯片厂商联合提供的一种软件接口,旨在减少芯片厂商和...
STM32F3系列可能与STM32F1系列在内存映射、复位和时钟控制(RCC)、系统时钟配置、外设访问配置、外设时钟配置、直接存储器存取(DMA)接口、中断向量、通用输入输出(GPIO)接口、模数转换器(ADC)接口、电源(PWR)接口、...
### STM32学习笔记知识点梳理 #### 一、STM32 GPIO操作 ...以上是关于STM32学习笔记中的主要知识点梳理,涵盖了从GPIO操作到时钟系统的各个方面,希望能帮助读者更好地理解和掌握STM32的使用技巧。
在STM32F103笔记1中,主要涉及了三个实验:跑马灯(蜂鸣器)实验、按键输入实验以及串口通信实验。这些实验都是基于STM32F103的基本外设操作,主要包括GPIO(通用输入/输出)和串行通信接口(USART)。 1. **跑马灯...
6. RCC系统:RCC(复用时钟控制器)是STM32F4的时钟管理系统,负责配置和控制所有外设的时钟源。"STM32F407-RCC介绍.pdf"可能包含了RCC的配置方法,如HSI、HSE、PLL等时钟源的选择和分频系数计算,以满足不同外设的...
- **RCC(重置和时钟控制)**:RCC是STM32F2系列中非常重要的一个模块,负责整个系统的时钟管理和重置操作。与STM32F1相比,STM32F2提供了更灵活的时钟源选择、更高的频率范围和更精细的时钟控制能力。 - **DMA...